目录

简介

先决条件

要求

使用的组件

背景信息

数据模型-基于编程和标准的配置和监控

Yet Another Next Generation (YANG) 数据建模语言 (RFC 6020)

网络配置 (NETCONF) 协议 (RFC 6241)

配置

1. 运行Cisco XE 16.3.3软件以支持NETCONF/YANG数据建模的Catalyst 3850的基本配置

2. 允许 NETCONF/YANG 系统日志和 SNMP 事件监控所需的其他（可选）配置

3. 本例中使用的 Catalyst 3850 的网络连接配置

在Catalyst 3850上验证NETCONF/YANG

配置集中管理平台（笔记本电脑）

1. 在笔记本电脑上安装 Yang Explorer 应用

2. 使用 Yang Explorer 应用

3. 订阅 NETCONF 通知（可选）

NETCONF/YANG 基本操作示例

1. 数据检索示例

从 Catalyst 3850 请求接口名称列表

2. 配置示例

关闭 Catalyst 3850 上的以太网接口

Catalyst 3850 CLI在上次NETCONF/YANG配置更改前后显示接口配置

在 Catalyst 3850 上保存配置

执行上次NETCONF/YANG配置保存操作后保存的启动配置的Catalyst 3850 CLI显示

从 CLI 配置 Catalyst 3850

3. 通过 GET 请求操作检查哪些 SNMP MIB 操作数据可用

加载其他 YANG 数据模型

1. 单独加载各种 YANG 数据模型文件

2. 一次批量加载所有 YANG 数据模型文件

值得注意的 YANG 数据模型

cisco-ia.yang 数据模型

ned.yang 数据模型

Python 脚本

从 Yang Explorer 应用 GUI 生成 Python 脚本

从集中管理平台（笔记本电脑）运行 Python 脚本

故障排除

NETCONF 错误消息

RPC 错误示例

其他 RPC 错误类型示例

简介

本文档介绍如何在基于Cisco IOS® XE 16.x的平台上配置NETCONF/YANG。

先决条件

要求

从Cisco IOS® XE 16.3.1软件开始支持NETCONF/YANG。

注意：使用本文档无需具备NETCONF、YANG或Python脚本编写方面的经验。

使用的组件

本文档中的信息基于以下软件和硬件版本：

在本示例中，运行Cisco IOS XE 16.3.3的单机WS-C3850-12X48U交换机用作NETCONF服务器。这是已配置的设备并通过NETCONF/YANG从中收集数据（show命令输出）。

笔记本电脑（运行 macOS Sierra 10.12.2 和 Google Chrome 浏览器的 Apple MacBook Pro）用作 NETCONF 客户端。它作为集中式管理平台，使用Yang Explorer应用程序。它是创建YANG格式请求的设备，这些请求通过NETCONF RPC（远程过程调用）消息发送到Catalyst 3850，以配置和收集来自Catalyst 3850的数据。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

背景信息

本文档中的示例重点介绍使用Catalyst 3850进行的实验室测试，但是，所提供的信息也适用于其他Cisco IOS XE 16.x平台，例如Cisco ASR 1000系列路由器。

数据模型 - 基于编程和标准的配置及监控

数据模型提供了另一种集中式方法来配置思科设备（而不是使用思科命令行界面 [CLI] 或简单网络管理协议 [SNMP]）并从思科设备收集操作数据（show 命令）。由于数据模型是基于相同过程的标准，并且还可用于配置或从非思科设备收集数据，因此非常适合支持多个供应商的客户。集中式管理平台（例如，笔记本电脑）可用于配置多个思科设备或收集数据，并且数据模型架构允许通过Python脚本自动执行这些程序（另外两个主要优势）。

Yet Another Next Generation (YANG) 数据建模语言 (RFC 6020)

YANG 是一种基于标准的数据建模语言，用于创建设备配置请求或操作（show 命令）数据请求。它具有类似于人类可读的计算机程序的结构化格式。有多种应用程序可以在集中管理平台（例如，笔记本电脑）上运行，以创建这些配置和运营数据请求。

有适用于所有供应商的标准（通用）YANG数据模型（例如，禁用或关闭以太网接口的请求对于思科和非思科设备可以是相同的），也有便于配置或收集与专有供应商功能相关的运营数据的设备（本机、供应商特定）数据模型。

网络配置 (NETCONF) 协议 (RFC 6241)

NETCONF是基于标准的可扩展标记语言(XML)编码的协议，它提供传输功能，将YANG格式的配置或运行数据请求从运行在集中管理平台上的应用程序（例如笔记本电脑）传输到用户希望配置或请求运行数据(show command)的思科设备。它提供基于事务的服务，例如当配置请求的一部分失败时中止整个配置请求。NETCONF 使用基于远程过程调用 (RPF) 的简单机制来简化客户端（集中管理平台脚本或应用）与服务器（思科交换机或路由器）之间的通信。它使用安全外壳 (SSH) 作为跨网络设备的传输层。一些 NETCONF 操作包括 get、get-config、edit-config 和 rpc。

配置

1. 运行Cisco XE 16.3.3软件以支持NETCONF/YANG数据建模的Catalyst 3850的基本配置

3850-1# show running-config

netconf-yang -------------------------------------> Enable NETCONF/YANG globally. It may take up to 90 seconds to initialize

username cisco1 privilege 15 password 0 cisco1 ---> Username/password used for NETCONF-SSH access

注意：这是Catalyst 3850上支持NETCONF/YANG数据建模所需的完整配置，但它假设没有全局配置aaa new-model（默认）。如果需要通过配置aaa new-model启用AAA（身份验证、授权和记帐），则至少还需要此配置。您也可以将其扩展为使用AAA和TACACS+或RADIUS配置，但这不在本示例的范围之内。

aaa new-model

aaa authorization exec default local -------------> Required for NETCONF-SSH connectivity and edit-config operations

2. 允许 NETCONF/YANG 系统日志和 SNMP 事件监控所需的其他（可选）配置

必须存在这些snmp-server配置，才能生成系统日志消息的NETCONF通知(RFC 5277 - Tools 5277)和任何已配置的SNMP陷阱，以同时生成NETCONF通知。

注意：虽然这些是最低要求，但也可以存在额外的snmp-server enable条目。客户端（集中管理平台）注册以从服务器(Catalyst 3850)接收NETCONF通知流并发送特定订用RPC(请参阅配置集中管理平台（笔记本电脑）的第3部分)。

3850-1# show running-config

snmp-server community <string> RW ------------------------------> SNMP gateway in DMI requires community public prior to 16.5.1. A configurable community is supported on 16.5.1 and later.

netconf-yang cisco-ia snmp-community-string <string> -----------> Configure the same community string to enable SNMP MIB access for both NETCONF and RESTCONF.

snmp-server trap link ietf -------------------------------------> enable traps for IETF link up/down

snmp-server enable traps snmp authentication linkdown linkup ---> enable traps for link up/down

snmp-server enable traps syslog --------------------------------> enable traps for Syslog so notifications can be generated

snmp-server manager --------------------------------------------> enable snmp-server

对于Syslog，当Catalyst 3850上的Ciscod生成Syslog消息时，Catalyst 3850上的数据模型接口(DMI)必须存在此配置，才能生成RFC 5277中定义的NETCONF通知。

logging history debugging -------> required for the generation of any NETCONF notification messages for Syslog

logging snmp-trap emergencies ---> configure 1 or more of the following to control which levels of Syslog messages are returned as notifications

logging snmp-trap alerts

logging snmp-trap critical

logging snmp-trap errors

logging snmp-trap warnings

logging snmp-trap notifications

logging snmp-trap informational

logging snmp-trap debugging

对于 SNMP 陷阱，必须存在此配置才能生成 NETCONF 通知。在Cisco XE 16.3.1软件中，最多可以配置10个SNMP陷阱来生成NETCONF通知，但此限制可在未来版本中删除。默认情况下，SNMP陷阱的通知生成已启用。要禁止生成SNMP陷阱通知，请使用此CLI no netconf-yang cisco-ia snmp-trap-control global-forwarding。

netconf-yang cisco-ia snmp-trap-control trap-list 10.3.6.1.6.3.1.1.5.3 --------> LinkDown trap

netconf-yang cisco-ia snmp-trap-control trap-list 10.3.6.1.6.3.1.1.5.4 --------> LinkUp trap

netconf-yang cisco-ia snmp-trap-control trap-list 10.3.6.1.4.1.9.9.41.2.0.1 ---> Syslog generated notification trap

3. 本例中使用的 Catalyst 3850 的网络连接配置

在本例中，Catalyst 3850管理接口GigabitEthernet0/0用于连接网络和集中管理平台（可以使用笔记本电脑）。动态主机配置协议(DHCP)已用于为此接口分配IP地址172.16.167.175。只要笔记本电脑可以通过网络访问 Catalyst 3850，即可在 Catalyst 3850 上使用备用配置。

3850-1# show running-config

vrf definition Mgmt-vrf

!

address-family ipv4

exit-address-family

!

address-family ipv6

exit-address-family

interface GigabitEthernet0/0

vrf forwarding Mgmt-vrf

ip address dhcp

negotiation auto

ip route vrf Mgmt-vrf 0.0.0.0 0.0.0.0 172.16.167.161

3850-1# show ip interface brief

Interface              IP-Address      OK? Method Status Protocol

Vlan1                  10.1.1.1         YES NVRAM  up     up

Vlan10                 10.10.10.1      YES NVRAM  up     up

Vlan20                 10.20.20.1      YES NVRAM  up     up

GigabitEthernet0/0     172.16.167.175  YES DHCP   up     up

Fo1/1/1                unassigned      YES unset  down   down

Fo1/1/2                unassigned      YES unset  down   down

GigabitEthernet1/0/1   unassigned      YES manual up     up

GigabitEthernet1/0/2   unassigned      YES unset  up     up

GigabitEthernet1/0/3   unassigned      YES unset  down   down

GigabitEthernet1/0/4   unassigned      YES unset  down   down

GigabitEthernet1/0/5   unassigned      YES unset  down   down

在Catalyst 3850上验证NETCONF/YANG

1. 在 Catalyst 3850 的命令行界面 (CLI) 中，以下命令可用于确保配置 netconf-yang 后，支持 Catalyst 3850 上的数据模型接口 (DMI) 所需的软件进程即可运行。

3850-1# show platform software yang-management process

confd : Running

nesd : Running

syncfd : Running

ncsshd : Running

dmiauthd : Running

vtyserverutild : Running

opdatamgrd : Running

ngnix : Running

后续步骤从集中管理平台执行。在本例中，使用一台笔记本电脑（运行macOS Sierra 10.12.2的Apple MacBook Pro），该笔记本电脑具有对Catalyst 3850的网络访问权限。命令从笔记本电脑的终端提示符发出。此时，笔记本电脑上未加载特殊应用。

2. 确保集中管理平台（笔记本电脑）可以通过网络访问 Catalyst 3850 (172.16.167.175)。

USER1-M-902T:~ USER1$ ping 172.16.167.175

PING 172.16.167.175 (172.16.167.175): 56 data bytes

64 bytes from 172.16.167.175: icmp_seq=0 ttl=247 time=3.912 ms

64 bytes from 172.16.167.175: icmp_seq=1 ttl=247 time=6.917 ms

64 bytes from 172.16.167.175: icmp_seq=2 ttl=247 time=4.063 ms

64 bytes from 172.16.167.175: icmp_seq=3 ttl=247 time=4.371 ms

^C

3. 使用此Catalyst 3850配置中的用户名和密码(cisco1/cisco1)，验证从集中管理平台（笔记本电脑）到Catalyst 3850（本例中为172.16.167.175）的SSH连接。响应可以是Catalyst 3850的NETCONF功能的长列表，后跟问候消息。TCP 端口 830 = netconf-ssh。

提示：如果此SSH测试不起作用，请确保笔记本电脑和Catalyst 3850之间的任何防火墙都允许TCP端口830(请参阅RFC 4742： Tools 4742)。

USER1-M-902T:~ USER1$ ssh -s cisco1@172.16.167.175 -p 830 netconf

cisco1@172.16.167.175’s password: cisco1

<?xml version="1.0" encoding="UTF-8"?>

<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<capabilities>

<capability>urn:ietf:params:netconf:base:1.0</capability>

<capability>urn:ietf:params:netconf:base:1.1</capability>

<capability>urn:ietf:params:netconf:capability:writable-running:1.0</capability>

<capability>urn:ietf:params:netconf:capability:xpath:1.0</capability>

<capability>urn:ietf:params:netconf:capability:validate:1.0</capability>

<capability>urn:ietf:params:netconf:capability:validate:1.1</capability>

<capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability

--snip--

</capabilities>

<session-id>2870</session-id></ hello>]]>]]>

Use < ^C > to exit

配置集中管理平台（笔记本电脑）

1. 在笔记本电脑上安装 Yang Explorer 应用

在本例中，在笔记本电脑（运行 macOS Sierra 10.12.2 和 Google Chrome 浏览器的 Apple MacBook Pro）上使用 Yang Explorer 应用充当集中管理平台。Yang Explorer允许用户执行此操作：

·从用户界面或命令行上传/编译YANG数据模型

·生成NETCONF RPC（远程过程调用）

·对实际NETCONF服务器(Catalyst 3850)执行RPC

·将创建的RPC保存到集合，以备以后使用

·浏览数据模型树并检查YANG的属性

注意：Linux系统也支持YANG Explore应用程序。

2. 使用 Yang Explorer 应用

启动Yang Explorer应用程序-从笔记本电脑上的终端提示符从yang-explorer目录运行./start.sh和命令。

注意：请保持打开此终端会话，否则，Yang Explorer应用程序会关闭并且必须重新启动。它还可以用作应用程序活动的控制台日志。

USER1-M-902T:~ USER1$ cd yang-explorer

USER1-M-902T:yang-explorer USER1$ ./start.sh &

Starting YangExplorer server ..

Use http://localhost:8088/static/YangExplorer.html

Performing system checks...

System check identified no issues (0 silenced).

January 19, 2017 - 23:12:20

Django version 1.8.3, using settings 'server.settings'

Starting development server at http://localhost:8088/

Quit the server with CONTROL-C.

启动杨氏资源管理器GUI -启动杨氏资源管理器应用GUI，并作为访客/访客登录杨氏资源管理器应用GUI在应用GUI主菜单的右上角（请参阅屏幕捕获）。

从Catalyst 3850检索功能。输入Catalyst 3850详细信息（IP地址、用户名/密码、TCP端口830用于ssh-netconf），然后单击Capabilities从Catalyst 3850软件检索YANG操作功能列表。

提示：此测试还可用于确认NETCONF在集中管理平台（笔记本电脑）上的Yang Explorer应用程序和Catalyst 3850之间是否正常工作。

加载 YANG 数据模型 - 可以在管理模型下订用各种 YANG 数据模型。订用 YANG 数据模型后，它们会显示在左侧的 Explorer 框中。借助这些 YANG 模型，无需具备深入的 YANG 专业知识，即可利用 Yang Explorer 应用创建 YANG 格式 NETCONF 远程过程调用 (RPC) 消息（发送到 Catalyst 3850，以对其进行配置或从其中检索数据）。下一节“基本NETCONF/YANG操作”中将介绍如何执行此操作的示例

示例：

3. 订阅 NETCONF 通知（可选）

客户端（集中管理平台）通过发送此YANG格式的NETCONF RPC消息，注册以从服务器(Catalyst 3850)接收NETCONF通知流。Catalyst 3850 以异步方式向订阅 NETCONF 通知的每个客户端发送这种通知。在完成此任务之前，请确保已在 Catalyst 3850 上进行正确配置，以支持在 Catalyst 3850 上配置 NETCONF/YANG 的 NETCONF 通知（请参阅第 2 部分）。当系统中发生事件时，NETCONF 服务器 (Catalyst 3850) 开始向 NETCONF 客户端（集中管理平台）发送事件通知。这些事件通知可以继续发送，直到NETCONF会话终止或订用因其他原因终止为止。有关订用选项工具5277的详细信息，请参阅RFC 5277。

<?xml version="1.0" encoding="utf-8"?>

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="">

<create-subscription xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">

<stream>snmpevents</stream>

</create-subscription>

</rpc>

为此，您需要将其剪切并粘贴到Yang Explorer应用GUI中作为自定义RPC。

接下来，选Run以通过NETCONF将自定义RPC消息发送到Catalyst 3850。Catalyst 3850 将使用一条 ok 消息进行应答，告知用户操作成功。

注意：本示例中使用的当前版本的Yang Explorer没有查看已接收的NETCONF通知的选项。它们通常存储在应用程序主菜单中可点击的通知日志中。

NETCONF/YANG 基本操作示例

现在，Catalyst 3850和集中管理平台已配置并开始通信，让我们看一些基本操作示例。

这些示例可以说明，通过NETCONF从Centralized Management Platform (Laptop) Yang Explorer应用发送到Catalyst 3850的YANG格式的NETCONF RPC消息通过Catalyst 3850上的confd软件进程转换为标准的Cisco IOS CLI。此外，Cisco IOS CLI 数据（show 命令数据）先通过 Catalyst 3850 上的 confd 软件进程转换为 YANG 格式数据，然后再作为 NETCONF RPC 消息发送到集中管理平台（笔记本电脑）Yang Explorer 应用。这意味着除了使用NETCONF/YANG执行相同操作外，Catalyst 3850上仍可使用常规CLI来配置交换机并收集show命令数据。

1. 数据检索示例

从 Catalyst 3850 请求接口名称列表

可从Yang Explorer应用程序GUI的左侧Explorer部分选择所需的操作。在本例中，将从 Catalyst 3850 检索接口名称数据，因此先选择 Oper（代表操作），然后在接口名称下拉菜单中选择 get-config。接下来选择RPC以生成YANG格式（可读）的NETCONF RPC，该RPC需要通过NETCONF发送到Catalyst 3850，以便从Catalyst 3850检索此数据。

在生成YANG格式的NETCONF RPC消息后，选择Run以将其发送到Catalyst 3850。Catalyst 3850回复YANG格式的（人类可读的）Catalyst 3850接口名称（GigabitEthernet1/1/1、GigabitEthernet1/1/2等）列表。

2. 配置示例

关闭 Catalyst 3850 上的以太网接口

从 Yang Explorer 应用 GUI 左侧的 Explorer 部分选择所需的操作。在这种情况下，需要在Catalyst 3850上配置接口（关闭接口），并且选择Config（用于配置），后跟接口下拉菜单下的必需操作参数。接下来选择RPC以生成YANG格式（可读）的NETCONF RPC，该RPC需要通过NETCONF发送到Catalyst 3850以执行配置任务。

在生成YANG格式的NETCONF RPC消息后，选择Run以将其发送到Catalyst 3850。Catalyst 3850 将使用 YANG 格式的（人类可读）消息进行应答，该消息指出配置操作成功 (ok)。

要确认更改已发生，可以检查配置。可以使用get-config操作(Oper)，其中Catalyst 3850回复接口GigabitEthernet 1/0/16配置已启用= false，这意味着该接口已关闭。

提示：一般来说，当不清楚在Yang Explorer应用程序的Explorer部分中的值可以是什么格式时，可以丢弃YANG格式的Catalyst 3850配置（如图所示），这是一个在尝试修改它们之前确定它们的好方法。接下来的屏幕的右侧在“属性”和“值”列中提供了这些值的一些说明和依赖关系。

在生成YANG格式的NETCONF RPC消息后，选择Run以将其发送到Catalyst 3850。 Catalyst 3850 将使用一条 YANG 格式的消息进行应答，该消息指出接口 GigabitEthernet 1/0/16 配置现在为“enabled = false”，这意味着该接口已关闭。

Catalyst 3850 CLI在上次NETCONF/YANG配置更改前后显示接口配置

下面显示的是在执行上一 Yang Explorer 配置更改操作时 Catalyst 3850 的 CLI 中的输出。接口 GigabitEthernet 1/0/16 在收到 NETCONF RPC 消息之前默认处于未关闭状态，如 Catalyst 3850 上的日志消息所示。在收到包含YANG格式的关闭接口请求的NETCONF RPC消息后，操作完成，接口关闭，运行配置被修改以反映这一点。这也展示了 Catalyst 3850 上的 confd 软件进程如何将收到的 YANG 格式 NETCONF RPC 消息转换为标准 Cisco IOS CLI。这意味着除了使用NETCONF/YANG执行此操作外，用户仍可使用常规Cisco IOS CLI修改配置并执行show命令。

3850-1# show running-config interface gigabitEthernet 1/0/16

Building configuration...

Current configuration : 39 bytes

!

interface GigabitEthernet1/0/16

end

3850-1# show startup-config | begin 1/0/16

interface GigabitEthernet1/0/16

!

*Jan 5 17:05:55.345: %DMI-5-CONFIG_I:Switch 1 R0/0: nesd: Configured from NETCONF/RESTCONF by cisco1, transaction-id 31332

*Jan 5 17:05:57.335: %LINK-5-CHANGED: Interface GigabitEthernet1/0/16, changed state to administratively down

3850-1# show running-config interface gigabitEthernet 1/0/16

Building configuration...

Current configuration : 49 bytes

!

interface GigabitEthernet1/0/16

shutdown -------------------------> the interface is shutdown now

end

3850-1#

注意：该配置尚未保存到Catalyst 3850上（从运行配置复制到启动配置）。

3850-1# show startup-config | begin 1/0/16

interface GigabitEthernet1/0/16

!

在 Catalyst 3850 上保存配置

可以在 Catalyst 3850 上将运行配置保存到启动配置，方法是通过 NETCONF 将以下 YANG 格式的 NETCONF RPC 消息发送到 Catalyst 3850。

<?xml version="1.0" encoding="utf-8"?>

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="">

<cisco-ia:save-config xmlns:cisco-ia="cisco/yang/cisco-ia"

</rpc>

可通过将上方消息作为“自定义 RPC”剪切并粘贴到 Yang Explorer 应用中来执行此操作。

选择“运行”以通过NETCONF将自定义RPC消息发送到Catalyst 3850。Catalyst 3850 将使用一条成功消息进行应答。

执行上次NETCONF/YANG配置保存操作后保存的启动配置的Catalyst 3850 CLI显示

启动配置现在与运行配置匹配：

3850-1# show running-config interface gigabitEthernet 1/0/16

Building configuration...

Current configuration : 49 bytes

!

interface GigabitEthernet1/0/16

shutdown

end

3850-1# show startup-config | begin 1/0/16

interface GigabitEthernet1/0/16

shutdown

!

从 CLI 配置 Catalyst 3850

如前所述，除了使用NETCONF/YANG执行此操作外，常规Catalyst 3850 CLI仍可用于配置交换机和收集show命令数据。当使用Catalyst 3850 CLI而不是NETCONF/YANG配置交换机时，新的运行配置将通过syncfd软件进程与Catalyst 3850上的数据模型接口(DMI)同步。

3850-1# show running-config interface gigabitEthernet 1/0/16

Building configuration...

Current configuration : 49 bytes

!

interface GigabitEthernet1/0/16

shutdown

end

3850-1# config t

Enter configuration commands, one per line.  End with CNTL/Z.

3850-1(config)# interface gigabitEthernet 1/0/16

3850-1(config-if)#no shutdown

3850-1(config-if)# exit

3850-1(config)# exit

3850-1#

*Jan 24 16:39:09.968: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/16, changed state to down

*Jan 24 16:39:13.479: %SYS-5-CONFIG_I: Configured from console by console

*Jan 24 16:39:15.208: %DMI-5-SYNC_START:Switch 1 R0/0: syncfd:  External change to running configuration detected. The running configuration can be synchronized to the DMI data store.

*Jan 24 16:39:43.290: %DMI-5-SYNC_COMPLETE:Switch 1 R0/0: syncfd:  The running configuration has been synchronized to the DMI data store.

3850-1#

下次Yang Explorer应用程序在CLI更改后请求接口配置副本时，更改将正确反映在YANG输出中。

选择“运行”以通过NETCONF将GigabitEthernet1/0/16的RPC get-config消息发送到Catalyst 3850。 Catalyst 3850 将使用 GigabitEthernet1/0/16 接口配置（显示 enabled = true）进行应答。

3. 通过 GET 请求操作检查哪些 SNMP MIB 操作数据可用

NETCONF GET操作可返回的SNMP MIB数据不可由用户配置。所有受支持的SNMP MIB转换成YANG数据模型定义的结构化数据，都是Catalyst 3850上的Cisco XE软件的一部分。要了解GET请求中有哪些MIB数据可用，提供了三个选项。所有支持的MIB都可以在功能响应中包含smv2。

第 1 项. 可以在Yang Explorer应用程序GUI中选择Capabilities按钮。Catalyst 3850 将使用包含 smiv2 MIB 条目的功能列表进行应答。

第 2 项. 此YANG格式的NETCONF RPC消息可以通过NETCONF发送到Catalyst 3850以检索功能列表，其中包括可用的smiv2 MIB模型。

<?xml version="1.0" encoding="utf-8"?>

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="">

<get>

<filter type="subtree">

<ncm:netconf-state xmlns:ncm="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">

<ncm:capabilities/>

</ncm:netconf-state>

</filter>

</get>

</rpc>

可通过将上方消息作为自定义 RPC 剪切并粘贴到 Yang Explorer 应用中来执行此操作。

选择“运行”以通过NETCONF将自定义RPC消息发送到Catalyst 3850。Catalyst 3850 将使用包含受支持 smiv2 MIB 的功能列表进行应答。

选项 3.可以在 Catalyst 3850 为响应来自集中管理平台（笔记本电脑）的 SSH 连接而返回的 NETCONF 功能和 Hello 消息中查看可用 MIB 模型的列表。

USER1-M-902T:~ USER1$ ssh -s cisco1@172.16.167.175 -p 830 netconf

cisco1@172.16.167.175’s password: cisco1

<?xml version="1.0" encoding="UTF-8"?>

<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<capabilities>

<capability>urn:ietf:params:netconf:base:1.0</capability>

<capability>urn:ietf:params:netconf:base:1.1</capability>

<capability>urn:ietf:params:netconf:capability:writable-running:1.0</capability>

<capability>urn:ietf:params:netconf:capability:xpath:1.0</capability>

<capability>urn:ietf:params:netconf:capability:validate:1.0</capability>

<capability>urn:ietf:params:netconf:capability:validate:1.1</capability>

<capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability

--snip--

<capability>urn:ietf:params:xml:ns:yang:smiv2:CISCO-CONFIG-MAN-MIB?module=CISCO-CONFIG-MAN-MIB&amp;revision=2007-04-27</capability>

<capability>urn:ietf:params:xml:ns:yang:smiv2:CISCO-CONTEXT-MAPPING-MIB?module=CISCO-CONTEXT-MAPPING-MIB&amp;revision=2008-11-22</capability>

<capability>urn:ietf:params:xml:ns:yang:smiv2:CISCO-DATA-COLLECTION-MIB?module=CISCO-DATA-COLLECTION-MIB&amp;revision=2002-10-30</capability>

--snip--

</capabilities>

<session-id>2870</session-id></ hello >]]>]]>

Use < ^C > to exit

加载其他 YANG 数据模型

此链接包含其他YANG数据模型文件。这些文件允许通过NETCONF/YANG执行与其他Catalyst 3850功能（如配置IPv4单播路由、QoS等）相关的其他操作。

GitHub Yang模型

通过选择standard、ietf、rfc，可以找到适用于所有供应商的标准（常见Internet工程任务组[IETF]）模型。以下链接提供了基于标准的 YANG 数据模型，这些数据模型摘自 IETF 标准组织发表的 RFC 出版物。

GitHub Yang模型树主标准

可以通过依次选择 vendor、cisco、xe、1632 找到思科原生（设备、供应商特定）模型。以下链接提供了适用于 Catalyst 3850 的 Cisco IOS XE 软件版本 16.3.2 的专用 YANG 数据模型。

GitHub Yang型号杨树主供应商

这些文件可以下载到集中管理平台（笔记本电脑），然后加载到Yang Explorer应用程序。有两种方法可以做到这一点。第一种方法是单独加载各种 YANG 数据模型文件，第二种方法是批量加载所有文件。

1. 单独加载各种 YANG 数据模型文件

提示：可以要求rawgit从Github下载文件。要从 Github 下载文件，请选择与相应 YANG 文件关联的原始按钮。如果提供URL而不是文件下载选项，则可以将URL粘贴到rawgit中，从而提供生产URL。将此新的生产URL粘贴到浏览器中，它可以提供文件下载选项。

在本例中，cisco-ethernet.yang已从github下载到集中管理平台（笔记本电脑）。以下是将文件加载到Yang Explorer应用程序GUI中，然后订阅，以便将其加载到工具的Explorer部分的步骤。

提示：NETCONF功能可用于确定Catalyst 3850软件支持的数据模型。请参阅配置集中管理平台（笔记本电脑）的第2节。

2. 一次批量加载所有 YANG 数据模型文件

第5.2.2节也提到了这一过程，即github。

在集中管理平台（笔记本电脑 - 运行 macOS Sierra 10.12.2 的 Apple MacBook Pro）上的终端提示符下，输入以下内容：

USER1-M-902T:~ USER1$ cd yang-explorer

USER1-M-902T:yang-explorer USER1$ cd server

USER1-M-902T:server USER1$ python manage.py bulkupload --user guest --git https://github.com/YangModels/yang.git --dir vendor/cisco/xe/1632

Git upload ..

Cloning into '/Users/USER1/yang-explorer/server/data/session/tmpk7V4O6'...

remote: Counting objects: 5610, done.

remote: Total 5610 (delta 0), reused 0 (delta 0), pack-reused 5610

Receiving objects: 100% (5610/5610), 11.80 MiB | 2.34 MiB/s, done.

Resolving deltas: 100% (3159/3159), done.

Checking out files: 100% (3529/3529), done.

Cleaning up /Users/USER1/yang-explorer/server/data/session/tmpk7V4O6

Compiling : user: guest, file: /Users/USER1/yang-explorer/server/data/session/tmpHTAEP3/cisco-acl-oper.yang

DEBUG:root:Compiling session dependency ...

//anaconda/bin/pyang

DEBUG:root:Rebuilding dependencies for user guest

--snip--

现在，可以在 Yang Explorer 应用 GUI 中看到所有 Yang 数据模型。单击“订阅”(Subscribe)，然后将其添加到工具的“浏览器”(Explorer)部分时，可以选择与所关注功能相关联的文件。

提示：NETCONF功能可用于确定Catalyst软件支持的数据模型。请参阅配置集中管理平台（笔记本电脑）的第2节。

现在可以完成其他任务，例如生成保存Catalyst 3850上的配置所需的NETCONF/YANG RPC。可通过在 Yang Explorer 应用左侧的 Explorer 部分中选择 save-conf RPC 来完成此任务。然后，选择RPC以生成YANG格式的NETCONF RPC，该RPC可以通过NETCONF发送到Catalyst 3850以保存Catalyst 3850上的配置。

选择“运行”以通过NETCONF将自定义RPC消息发送到Catalyst 3850。Catalyst 3850 将使用一条成功消息进行应答。

值得注意的 YANG 数据模型

cisco-ia.yang 数据模型

以下是 cisco-ia.yang 数据模型的一些 RPC 示例。值得注意的是，因为它们涉及以下操作：保存Catalyst 3850配置，将Catalyst 3850运行配置同步到本地数据模型接口(DMI)数据存储，以及重置Catalyst 3850上的DMI接口。

第一步是订阅cisco-ia.yang数据模型，使其显示在YANG Explorer应用程序GUI左侧的Explorer部分。

在YANG Explorer应用GUI左侧的Explorer部分中展开cisco-ia数据模型后，即可看到各种操作选项。例如，要使用其中一个可用的cisco-ia.yang数据模型选项，请选择save-config操作，并在选择RPC按钮时生成关联的RPC。

接下来选择运行，以通过 NETCONF 将 RPC 消息发送到 Catalyst 3850。Catalyst 3850 将使用一条成功消息进行应答，告知用户操作成功。

下面介绍了各种不同的 cisco-ia.yang 数据模型操作：

sync-from — 此RPC使Catalyst 3850上的NETCONF接口将设备运行配置的NETCONF Datastore表示与设备上的运行配置同步。这两种都存在于Catalyst 3850本身。

<?xml version="1.0" encoding="utf-8"?>

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="">

<cisco-ia:sync-from xmlns:cisco-ia

</rpc>

此 RPC 的默认行为是执行 sync without-defaults，这会使发送到设备的 show running-config 命令的输出与 NETCONF 数据存储同步。如果存在 sync-defaults，则 NETCONF 接口还会读取功能代码提供的默认配置信息。在大多数情况下，不使用此选项。通常，仅当 NETCONF 接口用户希望使用 NETCONF replace 命令替换设备配置的完整部分时，才会使用此选项。

<?xml version="1.0" encoding="utf-8"?>

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="">

<cisco-ia:sync-from xmlns:cisco-ia/>

<cisco-ia:sync-defaults/>

</cisco-ia:sync-from>

</rpc>

save-config — 此RPC执行write memory(copy running-config startup-config)命令，将当前设备运行配置保存到设备启动配置。

<?xml version="1.0" encoding="utf-8"?>

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="">

<cisco-ia:save-config xmlns:cisco-ia

</rpc>

checkpoint -此RPC使NETCONF接口使用Cisco IOSd内置配置存档功能将运行配置保存到非易失性存储。

<?xml version="1.0" encoding="utf-8"?>

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="">

<cisco-ia:checkpoint xmlns:cisco-ia

</rpc>

rollback — 此RPC使NETCONF接口将设备的运行配置回滚到与检查点RPC或设备上保存的任何其他有效运行配置一起保存的运行配置。

target-url              string (name of the saved checkpoint file)

verbose?              Boolean (show detail during rollback process)

nolock?                Boolean (lock configuration)

revert-on-error?   Empty (if error occurs during rollback, leave running unchanged)

revert-timer?        int16 (time in seconds before revets to the original configuration)

<?xml version="1.0" encoding="utf-8"?>

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="">

<cisco-ia:rollback xmlns:cisco-ia=

<cisco-ia:target-url>saved-config</cisco-ia:target-url>

<cisco-ia:verbose>true</cisco-ia:verbose>

<cisco-ia:nolock>true</cisco-ia:nolock>

<cisco-ia:revert-on-error></cisco-ia:revert-on-error>

<cisco-ia:revert-timer>10</cisco-ia:revert-timer>

</cisco-ia:rollback>

</rpc>

revert -此RPC会导致NETCONF接口更改回滚RPC的还原计时器。这将取消定时回滚并立即触发回滚，或者重置定时回滚的参数。

now?   empty

timer?  int16

idle?    int16

<?xml version="1.0" encoding="utf-8"?>

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="">

<cisco-ia:revert xmlns:cisco-ia

<cisco-ia:now/>

<cisco-ia:timer>10</cisco-ia:timer>

<cisco-ia:idle>60</cisco-ia:idle>

</cisco-ia:revert>

</rpc>

reset - NETCONF接口可以使用此RPC重新启动。如果重新初始化为 true，则 NETCONF 接口将清除可写入运行数据存储中存在的所有状态信息。如果为 false（默认值），系统将保留 NETCONF 配置数据存储状态信息。

<?xml version="1.0" encoding="utf-8"?>

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="">

<cisco-ia:reset xmlns:cisco-ia

<cisco-ia:reinitialize>true</cisco-ia:reinitialize>

</cisco-ia:reset>

</rpc>

注意：目前，某些Cisco平台或Cisco IOS软件版本无法支持所有给定功能。例如，将之前的重置发送到运行IOS 16.3.3的Catalyst 3850时，Catalyst 3850会将“不支持重置”错误作为RPC回复返回至集中管理平台（笔记本电脑）。

<nc:rpc-error xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">

<nc:error-type>application</nc:error-type>

<nc:error-tag>operation-failed</nc:error-tag>

<nc:error-severity>error</nc:error-severity>

<nc:error-path xmlns:cisco-ia

<nc:error-message lang="en" xmlns="https://www.w3.org/XML/1998/namespace">Reset not supported</nc:error-message>

<nc:error-info>

<nc:bad-element>reset</nc:bad-element>

</nc:error-info>

</nc:rpc-error>

ned.yang 数据模型

就思科设备 (Catalyst 3850) 配置而言，网络元素驱动程序 (NED) 数据模型（例如 ned.yang）提供的功能最强大。下面是一些演示此内容的屏幕截图。

第一步是订用 ned.yang 数据模型，使其显示在 YANG Explorer 应用 GUI 左侧的 Explorer 部分中。

在YANG Explorer应用程序左侧的Explorer部分中滚动可用选项，GUI在ned.yang数据模型中显示可配置Catalyst 3850功能的长列表。

例如，这些屏幕截图演示了在首先向下滚动YANG浏览器应用程序GUI左侧Explorer部分中可用的ned.yang数据模型配置选项列表后，如何显示Catalyst 3850的OSPF路由配置。ospf 子选项位于 router 选项内。选择 RPC 按钮时，系统将生成关联的 get-config RPC。

接下来选择运行，以通过 NETCONF 将 RPC 消息发送到 Catalyst 3850。Catalyst 3850以其OSPF路由配置作出回应。

以下是 Catalyst 3850 为响应 get-config RPC 操作而返回的 OSPF 路由配置的扩展。

<rpc-reply message-id="urn:uuid:0e2c04cf-9119-4e6a-8c05-238ee7f25208" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">

<data>

<native xmlns>

<router>

<ospf>

<id>100</id>

<redistribute>

<connected>

<redist-options>

<subnets/>

</redist-options>

</connected>

</redistribute>

<network>

<ip>10.10.0.0</ip>

<mask>0.0.255.255</mask>

<area>0</area>

</network>

<network>

<ip>10.20.0.0</ip>

<mask>0.0.255.255</mask>

<area>0</area>

</network>

<network>

<ip>10.100.0.0</ip>

<mask>0.0.255.255</mask>

<area>0</area>

</network>

</ospf>

</router>

</native>

</data>

</rpc-reply>

通过NETCONF从Catalyst 3850检索的YANG格式的OSPF路由配置是人工可读的，它匹配通过Catalyst 3850的CLI查看Catalyst 3850配置时所看到的内容。

3850-1# show running-config | section ospf

router ospf 100

redistribute connected subnets

network 10.10.0.0 0.0.255.255 area 0

network 10.20.0.0 0.0.255.255 area 0

network 10.100.0.0 0.0.255.255 area 0

3850-1#

如果需要，ned.yang数据模型也可用于修改OSPF路由配置。在本示例中，通过在Catalyst 3850上的现有OSPF路由配置中添加新的网络参数，首先在左侧杨氏浏览器应用程序GUI的“浏览器”部分中输入所需的参数（也输入了OSPF路由器ID 100，但由于浏览器屏幕滚动而未看到），然后生成相关的YANG格式的RPC，然后按RPC按钮。

接下来选择运行，以通过 NETCONF 将 RPC 消息发送到 Catalyst 3850。Catalyst 3850 将使用一条 ok 消息进行应答，告知用户操作成功。

通过 ned.yang 数据模型修改 OSPF 路由配置的这一 NETCONF/YANG RPC 操作反映在 Catalyst 3850 配置中，如通过 Catalyst 3850 的 CLI 所看到的那样。Catalyst 3850 上还会显示一条系统日志消息，该消息表明已通过 NETCONF 进行配置更改。

3850-1#

*Jan 30 14:13:41.659: %DMI-5-CONFIG_I:Switch 1 R0/0: nesd: Configured from NETCONF/RESTCONF by cisco1, transaction-id 23143

3850-1# show running-config | section ospf

router ospf 100

redistribute connected subnets

network 10.10.0.0 0.0.255.255 area 0

network 10.20.0.0 0.0.255.255 area 0

network 10.30.0.0 0.0.255.255 area 0 ------> new line added to OSPF configuration

network 10.100.0.0 0.0.255.255 area 0

3850-1#

有关如何通过 NETCONF/YANG 将运行配置保存到 Catalyst 3850 上的启动配置的详细信息，请参阅上一节 cisco-ia.yang 数据模型中提到的 save-config 操作。

Python 脚本

从 Yang Explorer 应用 GUI 生成 Python 脚本

Yang Explorer 应用 GUI 还可用于为给定的 NETCONF/YANG 操作生成 Python 脚本。Python 脚本的一个主要优势是它能够协调和自动执行 NETCONF/YANG 操作。

在本示例中，在集中管理平台（笔记本电脑）上Yang Explorer应用程序GUI左侧的Explorer窗口中选择了save-config操作。接下来，选择“脚本”按钮以生成Python脚本。然后，可以选择“复制”按钮以复制脚本，从而将脚本粘贴到一个文件中，该文件可通过Python.py文件扩展保存在集中管理平台(笔记本电脑)上。在本示例中，（未显示）此文件被命名为example.py。

注意：在下一个示例中，在GUI中使用Platform type other会导致运行Python脚本时出错。因此，“平台类型更改为csr，因为Cisco CSR路由器也像Catalyst 3850一样运行Cisco IOS XE软件。这避免了错误。

以下是生成 Python 脚本然后将其复制并粘贴到集中管理平台（笔记本电脑）上名为 example.py 的文件的扩展。

注意：杨氏浏览器应用程序GUI生成的example.py文件开头的注释包括运行Python脚本所需的步骤。负载包括脚本可以执行的NETCONF/YANG操作。在本例中是 save-config 操作。

"""

Netconf python example by yang-explorer (https://github.com/CiscoDevNet/yang-explorer)

Installing python dependencies:

> pip install lxml ncclient

Running script: (save as example.py)

> python example.py -a 172.16.167.174 -u cisco1 -p cisco1 --port 830

"""

import lxml.etree as ET

from argparse import ArgumentParser

from ncclient import manager

from ncclient.operations import RPCError

payload = """
<save-config xmlns

"""

if __name__ == '__main__':

parser = ArgumentParser(description='Usage:')

# script arguments

parser.add_argument('-a', '--host', type=str, required=True,

help="Device IP address or Hostname")

parser.add_argument('-u', '--username', type=str, required=True,

help="Device Username (netconf agent username)")

parser.add_argument('-p', '--password', type=str, required=True,

help="Device Password (netconf agent password)")

parser.add_argument('--port', type=int, default=830,

help="Netconf agent port")

args = parser.parse_args()

# connect to netconf agent

with manager.connect(host=args.host,

port=args.port,

username=args.username,

password=args.password,

timeout=90,

hostkey_verify=False,

device_params={'name': 'csr'}) as m:

# execute netconf operation

try:

response = m.dispatch(ET.fromstring(payload)).xml

data = ET.fromstring(response)

except RPCError as e:

data = e._raw

# beautify output

print(ET.tostring(data, pretty_print=True))

从集中管理平台（笔记本电脑）运行 Python 脚本

以下是运行Python脚本example.py之前的Catalyst 3850 CLI检查，该脚本可以将运行配置保存到启动配置。此时，shutdown命令位于接口GigabitEthernet1/0/10的运行配置中，而不是启动配置中。

3850-1# show running-config interface gigabitEthernet 1/0/10

Building configuration...

Current configuration : 49 bytes

!

interface GigabitEthernet1/0/10

shutdown

end

3850-1# show startup-config | begin 1/0/10

interface GigabitEthernet1/0/10

!

interface GigabitEthernet1/0/11

!

interface GigabitEthernet1/0/12

!

interface GigabitEthernet1/0/13

!

在集中管理平台（笔记本电脑）上的常规终端提示符下，首先将 Yang Explorer 应用 GUI 生成的 Python 文件 example.py 复制到笔记本电脑上的 yang-explorer 目录中。

USER1-M-902T:~ USER1$ pwd

/Users/USER1

USER1-M-902T:~ USER1$ cp /Users/USER1/Desktop/example.py /Users/USER1/yang-explorer

USER1-M-902T:~ USER1$ cd yang-explorer

USER1-M-902T:yang-explorer USER1$ ls -l

total 112

-rw-r--r-- 1 USER1 staff 11358 Jan 4 17:59 LICENSE

-rw-r--r-- 1 USER1 staff 13635 Jan 4 17:59 README.md

drwxr-xr-x 12 USER1 staff 408 Jan 4 17:59 YangExplorer

drwxr-xr-x 7 USER1 staff 238 Jan 4 17:59 default-models

drwxr-xr-x 3 USER1 staff 102 Jan 4 17:59 docs

-rw-r--r-- 1 USER1 staff 72 Jan 4 17:59 env.sh

-rw-r--r--@ 1 USER1 staff 1990 Jan 30 17:50 example.py

-rw-r--r-- 1 USER1 staff 207 Jan 4 17:59 requirements.txt

drwxr-xr-x 11 USER1 staff 374 Jan 5 14:37 server

-rwxr-xr-x 1 USER1 staff 4038 Jan 4 17:59 setup.sh

-rwxr-xr-x 1 USER1 staff 640 Jan 4 17:59 start.sh

drwxr-xr-x 5 USER1 staff 170 Jan 4 18:00 v

USER1-M-902T:yang-explorer USER1$

接下来，在集中管理平台(laptop)上的常规终端提示符下，执行这两个命令，这两个命令是在杨氏浏览器应用程序GUI生成的example.py文件开头处的注释部分提供的（请参阅上一部分，从杨氏浏览器应用程序GUI生成Python脚本）。

USER1-M-902T:yang-explorer USER1$ pip install lxml ncclient

Collecting lxml

Downloading lxml-3.7.2.tar.gz (3.8MB)

100% |████████████████████████████████| 3.8MB 328kB/s

Collecting ncclient

Downloading ncclient-0.5.3.tar.gz (63kB)

100% |████████████████████████████████| 71kB 3.5MB/s

Requirement already satisfied: setuptools>0.6 in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages (from ncclient)

Collecting paramiko>=1.15.0 (from ncclient)

Downloading paramiko-2.1.1-py2.py3-none-any.whl (172kB)

100% |████████████████████████████████| 174kB 3.1MB/s

Collecting six (from ncclient)

Using cached six-1.10.0-py2.py3-none-any.whl

Collecting cryptography>=1.1 (from paramiko>=1.15.0->ncclient)

Using cached cryptography-1.7.2-cp27-cp27m-macosx_10_6_intel.whl

Collecting pyasn1>=0.1.7 (from paramiko>=1.15.0->ncclient)

Using cached pyasn1-0.1.9-py2.py3-none-any.whl

Collecting cffi>=1.4.1 (from cryptography>=1.1->paramiko>=1.15.0->ncclient)

Using cached cffi-1.9.1-cp27-cp27m-macosx_10_10_intel.whl

Collecting enum34 (from cryptography>=1.1->paramiko>=1.15.0->ncclient)

Using cached enum34-1.1.6-py2-none-any.whl

Collecting ipaddress (from cryptography>=1.1->paramiko>=1.15.0->ncclient)

Using cached ipaddress-1.0.18-py2-none-any.whl

Collecting idna>=2.0 (from cryptography>=1.1->paramiko>=1.15.0->ncclient)

Using cached idna-2.2-py2.py3-none-any.whl

Collecting pycparser (from cffi>=1.4.1->cryptography>=1.1->paramiko>=1.15.0->ncclient)

Downloading pycparser-2.17.tar.gz (231kB)

100% |████████████████████████████████| 235kB 2.6MB/s

Installing collected packages: lxml, six, pycparser, cffi, pyasn1, enum34, ipaddress, idna, cryptography, paramiko, ncclient

Running setup.py install for lxml ... -

done

Running setup.py install for pycparser ... done

Running setup.py install for ncclient ... done

Successfully installed cffi-1.9.1 cryptography-1.7.2 enum34-1.1.6 idna-2.2 ipaddress-1.0.18 lxml-3.7.2 ncclient-0.5.3 paramiko-2.1.1 pyasn1-0.1.9 pycparser-2.17 six-1.10.0

USER1-M-902T:yang-explorer USER1$

第2条命令通过TCP端口830(netconf-ssh)对IP地址为172.16.167.174的Catalyst 3850运行Python脚本example.py，用户名/口令为cisco1/cisco1。Catalyst 3850 向集中管理平台（笔记本电脑）发送 RPC 应答，表明 save-config 操作成功。

USER1-M-902T:yang-explorer USER1$ python example.py -a 172.16.167.174 -u cisco1 -p cisco1 --port 830

<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:31e0fdee-b72f-4695-9e03-91ec771b37f5"><result xmlns>Save running-config successful

</result>

</rpc-reply>

USER1-M-902T:yang-explorer USER1

以下是在运行 Python 脚本 example.py 文件之后执行的 Catalyst 3850 CLI 检查，运行该文件会将运行配置保存到启动配置。由于 save-config NETCONF/YANG 操作成功，现在 shutdown 命令显示在接口 GigabitEthernet1/0/10 的运行配置和启动配置中。

3850-1# show running-config interface gigabitEthernet 1/0/10

Building configuration...

Current configuration : 49 bytes

!

interface GigabitEthernet1/0/10

shutdown

end

3850-1# show startup-config | begin 1/0/10

interface GigabitEthernet1/0/10

shutdown

!

interface GigabitEthernet1/0/11

!

interface GigabitEthernet1/0/12

!

interface GigabitEthernet1/0/13

!

故障排除

本部分提供的信息可用于对配置进行故障排除。

NETCONF 错误消息

NETCONF 协议定义了一组在 NETCONF 客户端（集中管理平台 [笔记本电脑]）和服务器设备 (Catalyst 3850) 上的 NETCONF 实施之间交换的操作和消息。常用的 NETCONF 操作包括：

<get>、<get-config>、<edit-config> 和 <rpc>

NETCONF 消息内容的格式和其他限制条件由 YANG 数据模型定义。NETCONF 客户端和服务器通过发送 RPC 进行交互。

如果NETCONF消息的格式有错误，或者消息内容与设备实施的YANG数据模型中的定义不匹配，则设备上的NETCONF服务器可能会返回RPC错误。

<error-type>application</error-type>

这些 RPC 错误并不表示 NETCONF 接口不工作，而是表示客户端正在尝试执行服务器设备上实施的 YANG 数据模型不支持的操作。用户必须查看在服务器设备上实施的 YANG 数据模型，以确定并解决导致这些错误的原因。

RPC 错误示例

在本例中，使用了不正确的接口类型 ianaift:fastEtherFX 来生成 YANG 格式的<edit-config> NETCONF RPC 消息，以通过 NETCONF 发送到 Catalyst 3850。

选择Run将RPC消息发送到Catalyst 3850后，Catalyst 3850会回复错误消息。

以下是 Catalyst 3850 返回的错误。请注意，它包含错误标记“operation-failed”，并且与错误相关的更多详细信息显示“Unsupported - value must be ethernetCsmacd or softwareLoopback”</nc：error-message>。

<nc:rpc-error xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">

<nc:error-type>application</nc:error-type>

<nc:error-tag>operation-failed</nc:error-tag>

<nc:error-severity>error</nc:error-severity>

<nc:error-path xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces">/rpc/edit-config/config/if:interfaces/if:interface[if:name='GigabitEthernet1/0/16']/if:type</nc:error-path>

<nc:error-message lang="en" xmlns="https://www.w3.org/XML/1998/namespace">/interfaces/interface[name='GigabitEthernet1/0/16']/type: "Unsupported - value must be ethernetCsmacd or softwareLoopback"</nc:error-message>

<nc:error-info>

<nc:bad-element>type</nc:bad-element>

</nc:error-info>

</nc:rpc-error>

接下来，让我们修复错误并在发送到Catalyst 3850的RPC消息中指定正确的接口类型ianift：ethernetCsmacd，以便Catalyst 3850以ok消息而不是错误进行回复。

此时，一旦选择Run将RPC消息发送到Catalyst 3850,Catalyst 3850将回复一条ok消息，以指示操作成功。

提示：不确定正确的Explorer Values格式时，可以在尝试更改其参数之前查看存在的配置。可以使用如图所示的 get-config 操作 (Oper) 来完成此任务。

选择Run将RPC消息发送到Catalyst 3850后，Catalyst 3850会回复YANG格式的接口配置，该配置显示接口类型为ianaft:ethernetCsmacd。

其他 RPC 错误类型示例

1. “使用中”（配置锁定）RPC 错误应答消息

这是对 <edit-config> 请求的 NETCONF 错误响应。<error-tag>表示“使用中”。响应表明，运行datastore的服务器设备(Catalyst 3850)NETCONF当前已锁定，此时无法执行NETCONF <edit-config>操作。这不表示NETCONF接口实现中出错。如果 NETCONF 客户端在 NETCONF 运行数据存储正在使用时尝试写入该数据存储，客户端会收到此 RPC 响应。NETCONF客户端可以重试NETCONF edit-config消息。当设备执行从设备同步内部操作以将NETCONF运行数据存储与设备IOSd配置同步时，可以收到此响应。

从服务器 (Catalyst 3850) 发送到客户端（集中管理平台 [笔记本电脑]）的 NETCONF 响应。

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="3">

<rpc-error>

<error-type>application</error-type>

<error-tag>in-use</error-tag>

<error-severity>error</error-severity>

<error-app-tag>config-locked</error-app-tag>

<error-info>

<session-id>0</session-id>

</error-info>

</rpc-error>

</rpc-reply>

2. “数据缺失”RPC 错误应答消息

在本示例中，为未配置的环回接口向Catalyst 3850发送了<edit-config> RPC。由于无法配置 Catalyst 3850 上不存在的接口，因此系统返回了错误。

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="3">

<rpc-error>

<error-type>application</error-type>

<error-tag>data-missing</error-tag>

<error-severity>error</error-severity>

<error-path xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces">/rpc/edit-config/config/if:interfaces/if:interface[if:name='Loopback1111']/if:type</error-path>

<error-message xml:lang="en">/interfaces/interface[name='Loopback1111']/type is not configured</error-message>

<error-info>

<bad-element>type</bad-element>

</error-info>

</rpc-error>

</rpc-reply>

3. “缺少数据模型”RPC错误回复消息

如果对Catalyst 3850上不存在的数据模型发出请求，或者对未在数据模型中实现的枝叶发出请求，则服务器(Catalyst 3850)以空数据响应进行响应。这是预料之中的现象。

提示：使用NETCONF功能确定Catalyst软件支持的数据模型。请参阅配置集中管理平台（笔记本电脑）的第2节。

<?xml version="1.0" encoding="utf-8"?>

<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"/>

4. "无效值" RPC错误回复消息

在某些情况下，根据YANG数据模型，NETCONF消息可能包含有效的内容，但是，设备(Catalyst 3850)无法实施请求的内容。当 Catalyst 3850 上的 NETCONF 接口向 IOSd 发送 IOSd 无法成功应用的配置时，系统会向 NETCONF 客户端返回特定的 RPC 错误响应。

在本例中，在 RPC 消息中向 Catalyst 3850 发送了无效的日志记录缓冲值 bogus。来自 Catalyst 3850 的应答中的错误标记表示值无效。错误消息表明 Catalyst 3850 IOS 解析器无法将日志记录缓冲的严重性级别配置为 bogus，因为这不是有效值。

<?xml version="1.0" encoding="utf-8"?>

<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6">

<rpc-error>

<error-type>application</error-type>

<error-tag>invalid-value</error-tag>

<error-severity>error</error-severity>

<error-message xml:lang="en">inconsistent value: Device refused command "logging buffered bogus" at column 20 </error-message>

</rpc-error>

</rpc-reply>