• 产品与解决方案
  • 行业解决方案
  • 服务
  • 支持
  • 合作伙伴
  • 新华三人才研学中心
  • 关于我们

11-网络管理和监控配置指导

目录

13-NETCONF配置

本章节下载 13-NETCONF配置  (345.67 KB)

13-NETCONF配置


1 NETCONF

说明

设备运行于FIPS模式时,本特性部分配置相对于非FIPS模式有所变化,具体差异请见本文相关描述。有关FIPS模式的详细介绍请参见“安全配置指导”中的“FIPS”。

 

1.1  NETCONF简介

NETCONF(Network Configuration Protocol,网络配置协议)是一种基于XML的网络管理协议,它提供了一种可编程的、对网络设备进行配置和管理的方法。用户可以通过该协议设置参数、获取参数值、获取统计信息等。

NETCONF报文使用XML格式,具有强大的过滤能力,而且每一个数据项都有一个固定的元素名称和位置,这使得同一厂商的不同设备具有相同的访问方式和结果呈现方式,不同厂商之间的设备也可以经过映射XML得到相同的效果,这使得它在第三方软件的开发上非常便利,很容易开发出在混合不同厂商、不同设备的环境下的特殊定制的网管软件。在这样的网管软件的协助下,使用NETCONF功能会使网络设备的配置管理工作,变得更简单更高效。

1.1.1  NETCONF协议结构

NETCONF协议采用了分层结构,分成四层:内容层、操作层、RPC(Remote Procedure Call,远程调用)层和通信协议层。

表1-1 XML分层与NETCONF分层模型对应关系

NETCONF分层

XML分层

说明

Content

配置数据、状态数据、统计信息等

内容层表示的是被管理对象的集合,可以是配置数据、状态数据、统计信息等。NETCONF协议具体可读写的数据请参见《NETCONF XML API 手册》

Operations

<get>,<get-config>,<edit-config>…

操作层定义了一系列在RPC中应用的基本的原语操作集,这些操作将组成NETCONF的基本能力。NETCONF全面地定义了对被管理设备的九种基础操作

设备支持的操作请参见“2.1  附录 A Comware V7中支持的NETCONF操作类型

RPC

<rpc>,<rpc-reply>

RPC层为RPC模块的编码提供了一个简单的、传输协议无关的机制。通过使用<rpc>和<rpc-reply>元素分别对NETCONF请求和响应数据(即操作层和内容层的内容)进行封装

Transport Protocol

非FIPS模式下:Console/Telnet/SSH/HTTP/HTTPS /TLS

FIPS模式下:

Console/SSH/HTTPS/TLS

非FIPS模式下:通信协议层为NETCONF提供面向连接的、可靠的、顺序的数据链路。NETCONF支持Telnet、SSH、Console等CLI登录方式/协议,即NETCONF over SSH/Telnet/Console;NETCONF支持HTTP、HTTPS登录协议,即NETCONF over HTTPS/HTTP;NETCONF还支持封装成SOAP(Simple Object Access Protocol,简单对象访问协议)报文后通过HTTP、HTTPS协议传输,即NETCONF over SOAP over HTTP/HTTPS

FIPS模式下:

通信协议层为NETCONF提供面向连接的、可靠的、顺序的数据链路。NETCONF支持SSH、Console等CLI登录方式/协议,即NETCONF over SSH/Console;NETCONF支持HTTPS登录协议,即NETCONF over HTTPS;NETCONF还支持封装成SOAP报文后通过HTTPS协议传输,即NETCONF over SOAP over HTTPS

 

1.1.2  NETCONF报文格式

1. NETCONF

·     NETCONF命令必须符合XML语言的基本格式。

·     NETCONF和NETCONF over SOAP报文格式请遵循RFC 4741。

·     NETCONF操作以及可操作的数据项,请参见《NETCONF XML API 手册》。NETCONF报文的数据合法性都将经过校验才会下发,如果校验失败则会向客户端报错。其中,数据合法性校验通过XML Schema的方式完成。

说明

XML视图下进行NETCONF配置时,XML报文最后需要添加"]]>]]>",否则设备无法识别,本手册举例中,为方便识别XML格式,均未添加此结束符,实际操作中,请自行添加。

 

如下为一个NETCONF报文示例,用于获取设备上所有接口的所有参数:

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

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

  <get-bulk>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0">

        <Ifmgr>

          <Interfaces>

                 <Interface/>

          </Interfaces>

        </Ifmgr>

      </top>

    </filter>

  </get-bulk>

</rpc>

2. NETCONF over SOAP

NETCONF over SOAP之后,NETCONF报文会放在SOAP报文的BODY元素里,这些报文除了需要遵循纯NETCONF报文的规则外,还需要遵循以下规则:

·     SOAP消息必须用XML来编码。

·     SOAP消息必须使用SOAP Envelope命名空间。

·     SOAP消息必须使用SOAP Encoding命名空间。

·     SOAP消息不能包含DTD(Decoument Type Definition,文件类型定义)引用。

·     SOAP消息不能包含XML处理指令。

如下为一个NETCONF over SOAP报文示例,用于获取设备上所有接口的所有参数:

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">

  <env:Header>

    <auth:Authentication env:mustUnderstand="1" xmlns:auth="http://www.h3c.com/netconf/base:1.0">

      <auth:AuthInfo>800207F0120020C</auth:AuthInfo>

    </auth:Authentication>

  </env:Header>

  <env:Body>

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

      <get-bulk>

        <filter type="subtree">

          <top xmlns="http://www.h3c.com/netconf/data:1.0">

            <Ifmgr>

              <Interfaces>

                     <Interface/>

              </Interfaces>

            </Ifmgr>

          </top>

        </filter>

      </get-bulk>

    </rpc>

  </env:Body>

</env:Envelope>

1.1.3  如何使用NETCONF

用户可通过以下方式来使用NETCONF协议配置/管理设备:

·     用户可以通过Telnet、SSH、Console登录到设备的CLI界面,通过命令行界面编辑下发NETCONF指令。该方式一般用于研发和测试环境。在XML视图下,将合法的NETCONF报文直接拷贝、粘贴到命令行提示符处,即可验证设备的NETCONF功能是否运行正常。

·     用户使用自己开发的配置工具给设备下发NETCONF指令来实现对设备的访问。因为用户开发的配置工具的URL和设备出厂支持的URL不一致,用户需要将下发NETCONF指令用SOAP封装成一种通用的格式,以便设备能够正常转换。因此,使用该方式前必须使能NETCONF over SOAP功能。

1.1.4  协议规范

与NETCONF、SOAP协议相关的协议规范有:

·     RFC 3339:Date and Time on the Internet: Timestamps

·     RFC 4741:NETCONF Configuration Protocol

·     RFC 4742:Using the NETCONF Configuration Protocol over Secure SHell (SSH)

·     RFC 4743:Using NETCONF over the Simple Object Access Protocol (SOAP)

·     RFC 5277:NETCONF Event Notifications

·     RFC 5381:Experience of Implementing NETCONF over SOAP

·     RFC 5539:NETCONF over Transport Layer Security (TLS)

·     RFC 6241:Network Configuration Protocol

1.2  NETCONF配置任务简介

表1-2 NETCONF配置任务简介

配置任务

说明

详细配置

使能NETCONF over SOAP功能

可选

1.3 

使能NETCONF over SSH功能

可选

1.4 

配置NETCONF日志功能

可选

1.5 

建立NETCONF会话

必选

1.6 

向设备进行事件订阅

可选

1.7 

给当前配置加锁/解锁

可选

1.8 

<get>/<get-bulk>获取信息

可选

1.9.1 

<get-config>/<get-bulk-config>获取配置信息

可选

1.9.2 

<edit-config>编辑指定模块数据

可选

1.9.3 

配置保存、回滚、加载

可选

1.10 

通配符和过滤器功能

可选

1.11 

命令行操作

可选

1.12 

获取会话信息

可选

1.13 

关闭另一个会话

可选

1.14 

退出XML视图

可选

1.15 

 

1.3  使能NETCONF over SOAP功能

NETCONF支持封装成SOAP报文后通过HTTP、HTTPS协议传输,即NETCONF over SOAP over HTTP/HTTPS,使用该功能后,用户可以通过开发Web配置工具给设备下发NETCONF指令来实现对设备的访问。

表1-3 配置SOAP服务

操作

命令

说明

进入系统视图

system-view

-

使能HTTP的SOAP功能

netconf soap http enable

FIPS模式下,不支持本命令

缺省情况下,基于HTTP的SOAP功能处于关闭状态

使能HTTPS的SOAP功能

netconf soap https enable

缺省情况下,基于HTTPS的SOAP功能处于关闭状态

配置设备发送的基于HTTP的SOAP报文的DSCP优先级

netconf soap http dscp dscp-value

缺省情况下,基于HTTP的SOAP报文的DSCP优先级为0

配置设备发送的基于HTTPS的SOAP报文的DSCP优先级

netconf soap https dscp dscp-value

缺省情况下,基于HTTPS的SOAP报文的DSCP优先级为0

配置设备发送的基于HTTPS的SOAP报文的DSCP优先级

netconf soap https dscp dscp-value

缺省情况下,基于HTTPS的SOAP报文的DSCP优先级为0

配置基于HTTP的NETCONF over SOAP功能关联的ACL

netconf soap http acl { acl-number | name acl-name }

缺省情况下,未配置基于HTTP的NETCONF over SOAP功能关联的ACL

FIPS模式下,不支持本命令

 

1.4  使能NETCONF over SSH功能

NETCONF支持标准协议规范中描述的NETCONF over SSH功能,使能该功能后,用户可以通过使用支持NETCONF over SSH登录方式的客户端配置工具给设备下发NETCONF指令来实现对设备的访问。

表1-4 配置NETCONF over SSH服务

操作

命令

说明

进入系统视图

system-view

-

使能NETCONF over SSH功能

netconf ssh server enable

缺省情况下,NETCONF over SSH功能处于关闭状态

指定NETCONF over SSH的监听端口

netconf ssh server port port-number

缺省情况下,NETCONF over SSH使用端口830

 

1.5  配置NETCONF日志功能

NETCONF日志功能可以记录操作源对设备进行的NETCONF操作,用户通过指定NETCONF操作源和NETCONF操作类型,配置系统输出指定类型的NETCONF日志。

表1-5 配置NETCONF日志功能

操作

命令

说明

进入系统视图

system-view

-

NETCONF日志功能

netconf log source { all | { agent | soap | web } * } { { protocol-operation { all | { action | config | get | set | session | syntax | others } * } } | verbose }

缺省情况下,未配置NETCONF日志功能

 

1.6  建立NETCONF会话

提示

·     客户端必须给设备发送hello信息,完成能力集的交互后,设备才会处理客户端发送的其它请求。

·     设备同时最多能建立32个NETCONF连接,即最多支持32个用户同时使用NETCONF功能管理和监控设备。用户数超过上限后,新登录的用户将登录失败。

 

1.6.1  进入XML视图

表1-6 进入XML视图

操作

命令

说明

进入XML视图

xml

该命令在用户视图下执行

 

1.6.2  交换能力集

进入XML视图后,客户端和设备必须交换各自支持的能力集,双方收到对方的能力集后才可以进行下一步操作。

1. 设备发送给客户端的报文

客户端进入XML视图后,设备会发送如下报文自动告知客户端支持的NETCONF能力集:

<?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.1</capability><capability>urn:ietf:params:netconf:writable-running</capability><capability>urn:ietf:params:netconf:capability:notification:1.0</capability><capability>urn:ietf:params:netconf:capability:validate:1.1</capability><capability>urn:ietf:params:netconf:capability:interleave:1.0</capability><capability>urn:h3c:params:netconf:capability:h3c-netconf-ext:1.0</capability></capabilities><session-id>1</session-id></hello>]]>]]>

其中:

·     <capabilities>和</capabilities>之间的内容表示设备支持的能力集。

·     <session-id>和</session-id>之间的内容表示为本次会话分配的会话ID,用来唯一标识本次会话。

2. 客户端发送给设备的报文

客户端收到设备发送的能力集协商报文后,需要给设备发送如下格式的报文,告知设备客户端支持哪些NETCONF能力集。

Hello协商报文格式如下:

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

  <capabilities>

    <capability>

     capability-set

   </capability>

 </capabilities>

</hello>

其中,capability-set表示客户端支持的能力集,由用户定义。一个<capability>和</capability>选项对中填写一个能力集,可以使用多个选项对,发送多个能力集。

1.7  向设备进行事件订阅

用户向设备订阅事件后,设备上发生用户订阅的事件时,设备会自动向订阅的客户端发送事件的相关信息,信息内容包括事件的code、group、severity以及发生时间和描述信息。

需要注意的是:

·     订阅只对当前连接生效。如果连接断开,订阅会自动取消。

·     多次发送订阅报文,可以订阅多个事件。

1.7.1  订阅事件

1. 客户端发送报文

事件订阅报文格式如下:

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

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

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

         <stream>NETCONF</stream>

         <filter>

             <event xmlns="http://www.h3c.com/netconf/event:1.0">

                 <Code>code</Code>

                 <Group>group</Group>

                 <Severity>severity</Severity>

             </event>

         </filter>

         <startTime>start-time</startTime>

         <stopTime>stop-time</stopTime>

     </create-subscription>

</rpc>

其中:

·     stream表示支持的事件流,目前只支持NETCONF。

·     event表示订阅的事件。

·     code表示日志信息中的助记符。

·     group表示日志信息中的模块名。

·     severity表示日志信息中的安全级别。

·     start-time表示订阅的开始时间。

·     stop-time表示结束订阅的时间。

2.  结果验证

设备收到订阅报文后会回应客户端,当客户端收到如下报文时,表示订阅成功:

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

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

    <ok/>

</rpc-reply >

当订阅出错时设备会返回错误信息,例如:

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

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

<rpc-error>

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

   <error-tag>error-tag</error-tag>

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

   <error-message xml:lang="en">error-message</error-message>

</rpc-error>

</rpc-reply>

错误报文的详细定义请参见RFC 4741

1.7.2  订阅事件举例

1. 组网需求

客户端订阅没有时间限制的全部事件。订阅后在断开连接之前,设备发生的所有事件都会发送给客户端。

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

        <capability>

            urn:ietf:params:netconf:base:1.0

        </capability>

    </capabilities>

</hello>

# 订阅全部事件,不限制订阅时间。

请将以下报文拷贝、粘贴到客户端:

<rpc message-id="100"

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

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

        <stream>NETCONF</stream>

    </create-subscription>

</rpc>

3. 结果验证

# 如果客户端收到如下报文,则表示订阅成功:

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

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

    <ok/>

</rpc-reply>

当设备上的风扇1有问题时,设备会发送如下报文来通知订阅客户端:

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

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

    <eventTime>2011-01-04T12:30:46</eventTime>

    <event xmlns="http://www.h3c.com/netconf/event:1.0">

        <Group>DEV</Group>

        <Code>FAN_DIRECTION_NOT_PREFERRED</Code>

        <Slot>6</Slot>

        <Severity>Alert</Severity>

        <context>Fan 1 airflow direction is not preferred on slot 6, please check it.</context>

    </event>

</notification>

当用户(IP地址为192.168.100.130)登录设备时,设备会发送如下报文来通知订阅客户端:

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

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

    <eventTime>2011-01-04T12:30:52</eventTime>

    <event xmlns="http://www.h3c.com/netconf/event:1.0">

        <Group>SHELL</Group>

        <Code>SHELL_LOGIN</Code>

        <Slot>6</Slot>

        <Severity>Notification</Severity>

        <context>VTY logged in from 192.168.100.130.</context>

    </event>

</notification>

1.8  给当前配置加锁/解锁

因为设备同时可以建立多个NETCONF连接,即支持多个用户同时使用NETCONF功能管理和监控设备。所以,当用户管理、维护设备或者定位网络问题时,为防止其他NETCONF用户修改当前配置、引入干扰,可以使用本特性给当前配置加锁。给当前配置加锁后,只有持有锁的用户可以修改设备的当前配置,其他NETCONF用户只能读取,不能修改当前配置。

只有持有锁的用户可以解锁,解锁后其他用户才可以修改设备的当前配置或另外加锁。如果持有锁的用户的当前连接断开,系统会自动解锁。

1.8.1  给当前配置加锁

1. 客户端发送报文

目前设备只支持对当前配置加锁,不能对具体的功能模块进行加锁。请将以下报文拷贝、粘贴到客户端,用户即能完成加锁操作:

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

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

    <lock>

      <target>

        <running/>

      </target>

    </lock>

  </rpc>

2. 结果验证

设备收到加锁报文后会回应客户端,当客户端收到如下报文时,表示加锁成功:

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

  <rpc-reply message-id="100"

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

     <ok/>

</rpc-reply>

1.8.2  给当前配置解锁

提示

 

1. 客户端发送报文

请将以下报文拷贝、粘贴到客户端,用户即能完成解锁操作:

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

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

    <unlock>

      <target>

        <running/>

      </target>

    </unlock>

  </rpc>

2. 结果验证

设备收到解锁报文后会回应客户端,当客户端收到如下报文时,表示解锁成功:

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

    <rpc-reply message-id="100"

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

      <ok/>

</rpc-reply>

1.8.3  当前配置加锁举例

1. 组网需求

给设备加锁,以免其它用户使用XML语言修改设备的当前配置。

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

        <capability>

            urn:ietf:params:netconf:base:1.0

        </capability>

    </capabilities>

</hello>

# 对当前配置加锁。

请将以下报文拷贝、粘贴到客户端:

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

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

    <lock>

      <target>

        <running/>

      </target>

    </lock>

  </rpc>

3. 结果验证

# 如果客户端收到如下报文,则表示加锁成功:

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

    <rpc-reply message-id="100"

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

      <ok/>

</rpc-reply>

用户加锁成功后,另一客户端发送加锁报文,设备会返回如下报文:

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

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

<rpc-error>

  <error-type>protocol</error-type>

  <error-tag>lock-denied</error-tag>

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

  <error-message xml:lang="en">Lock failed because the NETCONF lock is held by another session.</error-message>

  <error-info>

    <session-id>1</session-id>

  </error-info>

  </rpc-error>

</rpc-reply>

以上报文表明:加锁失败,session-id是1的用户已经持有锁。

1.9  业务处理功能

NETCONF支持用户对设备进行业务操作,包括对指定信息的获取和修改。基本标签有<get>、<get-bulk>、<get-config>、<get-bulk-config>和<edit-config>,分别用来获取所有数据、获取配置数据和编辑指定模块的数据。详细规则参见《NETCONF XML API 手册》。

1.9.1  <get>/<get-bulk>获取信息

<get>操作用来获取数据,包括运行状态数据和配置数据。

<get-bulk>操作用来从指定索引的下一条开始批量获取后续N条数据(索引行数据不返回),包括运行状态数据和配置数据。用户通过index属性由指定索引,通过count属性指定N。如未指定索引,则以第一条为索引;如未指定N,或者数据表中符合条件的数据记录不足N条,则返回表中所有剩下的数据条目。

<get>操作会返回所有符合条件的数据,在某些情况下,会导致获取数据效率不高。<get-bulk>允许用户从固定数据项开始,向后获取指定条目的数据记录。

1. 客户端发送报文

<get>和<get-bulk>报文的通用格式如下:

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

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

  <getoperation>

    <filter>

      <top xmlns=" http://www.h3c.com/netconf/data:1.0">

          指定模块,子模块,表名,列名

      </top>

    </filter>

  </getoperation>

</rpc>

其中,getoperation可以为get或者get-bulk。<filter>选项用于过滤信息,<filter>中可包括模块名、子模块名、表名和列名:

·     如果不指定模块(子模块),则表示全部模块(子模块)。一旦指定模块(子模块),则返回数据只包含指定模块(子模块)。

·     如果模块下不指定表,则表示全部表。一旦指定表,则返回数据只包含指定表。

·     如果只指定索引列,则返回的数据包括全部的列。如果同时指定了索引列之外的其他列,则意味着返回的数据仅仅包含索引列和指定的列。

<get-bulk>操作报文中还可以携带count和index参数,如下为一个携带了count和index参数的<get-bulk>操作报文示例:

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

<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:xc="http://www.h3c.com/netconf/base:1.0">

  <get-bulk>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0" xmlns:base="http://www.h3c.com/netconf/base:1.0">

        <Syslog>

            <Logs xc:count="5">

                   <Log>

                      <Index>10</Index>

                    </Log>

             </Logs>

        </Syslog>

      </top>

    </filter>

  </get-bulk>

</rpc>

其中,<get-bulk>操作报文中的count属性遵循如下约定:

·     count属性的位置在可以从top下的节点开始,到表节点为止,即:模块节点,表节点这几个位置都能放置count属性,其他位置的count将不被解释。

·     如果count放在模块节点上,则报文中指定的子孙节点(表)中没有count的都默认count属性的值和模块一致。

·     如果不指定count,则获取出从指定索引开始的所有数据。

2. 结果验证

设备收到配置获取请求报文后会将相应参数的值通过如下报文反馈给客户端:

<?xml version="1.0"?>

<rpc-reply message-id="100"

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

  <data>

     全部配置数据和状态数据

  </data>

</rpc-reply>

1.9.2  <get-config>/<get-bulk-config>获取配置信息

<get-config>和<get-bulk-config>用来获取系统中所有可配置的变量的值,配置的方式包括CLI、MIB等。<get-config>和<get-bulk-config>操作报文中可以包含子标签<filter>,用来对要获取的信息进行过滤。

1. 客户端发送报文:

<get-config>和<get-bulk-config>的通用报文格式如下:

<?xml version="1.0"?>

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

  <get-config>

    <source>

      <running/>

    </source>

    <filter>

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

          指定模块,子模块,表名,列名

      </top>

    </filter>

  </get-config>

</rpc>

2. 结果验证

设备收到配置获取请求报文后会将相应配置通过如下报文反馈给客户端:

<?xml version="1.0"?>

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

  <data>

    所有指定filter内的数据

  </data>

</rpc-reply>

1.9.3  <edit-config>编辑指定模块数据

<edit-config>支持如下选项:merge、create、replace、remove、delete、默认操作选项、默认错误处理选项、测试处理,关于这些选项的详细描述请参见“2.1  附录 A Comware V7中支持的NETCONF操作类型”。

1. 客户端发送报文

<?xml version="1.0"?>

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

  <edit-config>

    <target><running></running></target>

<error-option>

   失败时默认操作

</error-option>

    <config>

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        指定模块名,子模块名,列名,表名

      </top>

    </config>

  </edit-config>

</rpc>

2. 结果验证

·     设备收到edit-config请求后会回应客户端,当客户端收到如下报文时,表示设置成功:

<?xml version="1.0">

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

  <ok/>

</rpc-reply>

·     另外,用户还可以通过<get>操作可以查看参数的当前值是否和edit-config操作设置的值一致。

1.9.4  举例——获取所有模块所有配置数据

1. 组网需求

获取所有模块所有配置数据。

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

        <capability>

            urn:ietf:params:netconf:base:1.0

        </capability>

    </capabilities>

</hello>

# 获取所有模块所有配置数据。

请将以下报文拷贝、粘贴到客户端:

<rpc message-id="100"

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

  <get-config>

    <source>

      <running/>

    </source>

  </get-config>

</rpc>

3. 结果验证

# 如果客户端收到类似如下的报文,则表示操作成功:

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

    <data>

        <top xmlns="http://www.h3c.com/netconf/config:1.0">

            <Ifmgr>

                <Interfaces>

                    <Interface>

                        <IfIndex>1307</IfIndex>

                        <Shutdown>1</Shutdown>

                    </Interface>

                    <Interface>

                        <IfIndex>1308</IfIndex>

                        <Shutdown>1</Shutdown>

                    </Interface>

                    <Interface>

                        <IfIndex>1309</IfIndex>

                        <Shutdown>1</Shutdown>

                    </Interface>

                    <Interface>

                        <IfIndex>1311</IfIndex>

 

                            <VlanType>2</VlanType>

 

                    </Interface>

                    <Interface>

                        <IfIndex>1313</IfIndex>

 

                            <VlanType>2</VlanType>

 

                    </Interface>

                </Interfaces>

            </Ifmgr>

            <Syslog>

                <LogBuffer>

                    <BufferSize>120</BufferSize>

                </LogBuffer>

            </Syslog>

            <System>

                <Device>

                    <SysName>H3C</SysName>

                    <TimeZone>

                        <Zone>+11:44</Zone>

                        <ZoneName>beijing</ZoneName>

                    </TimeZone>

                </Device>

            </System>

        </top>

    </data>

</rpc-reply>

1.9.5  举例——获取Syslog模块的所有配置数据

1. 组网需求

获取Syslog模块的所有配置数据

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

        <capability>

            urn:ietf:params:netconf:base:1.0

        </capability>

    </capabilities>

</hello>

# 获取Syslog模块的所有配置数据。

请将以下报文拷贝、粘贴到客户端:

<rpc message-id="100"

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

  <get-config>

    <source>

      <running/>

    </source>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        <Syslog/>

      </top>

    </filter>

  </get-config>

</rpc>

3. 结果验证

# 如果客户端收到类似如下的报文,则表示操作成功:

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

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

    <data>

        <top xmlns="http://www.h3c.com/netconf/config:1.0">

            <Syslog>

                    <LogBuffer>

                        <BufferSize>120</BufferSize>

                    </LogBuffer>

            </Syslog>

        </top>

    </data>

</rpc-reply>

1.9.6  举例——取接口表的一条数据

1. 组网需求

取接口表的一条数据

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

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

    </capabilities>

</hello>

# 取接口表的一条数据。

请将以下报文拷贝、粘贴到客户端:

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

    <get-bulk>

        <filter type="subtree">

            <top xmlns="http://www.h3c.com/netconf/data:1.0" xmlns:web="http://www.h3c.com/netconf/base:1.0">

                <Ifmgr>

                    <Interfaces web:count="1">

                    </Interfaces>

                </Ifmgr>

            </top>

        </filter>

    </get-bulk>

</rpc>

3. 结果验证

# 如果客户端收到类似如下的报文,则表示操作成功:

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

  <data>

    <top xmlns="http://www.h3c.com/netconf/data:1.0">

      <Ifmgr>

        <Interfaces>

          <Interface>

            <IfIndex>3</IfIndex>

            <Name>Ten-GigabitEthernet1/0/2</Name>

            <AbbreviatedName>XGE1/0/2</AbbreviatedName>

            <PortIndex>3</PortIndex>

            <ifTypeExt>22</ifTypeExt>

            <ifType>6</ifType>

            <Description>Ten-GigabitEthernet 1/0/2 Interface</Description>

            <AdminStatus>2</AdminStatus>

            <OperStatus>2</OperStatus>

            <ConfigSpeed>0</ConfigSpeed>

            <ActualSpeed>100000</ActualSpeed>

            <ConfigDuplex>3</ConfigDuplex>

            <ActualDuplex>1</ActualDuplex>

          </Interface>

        </Interfaces>

      </Ifmgr>

    </top>

  </data>

</rpc-reply>

1.9.7  举例——修改参数值

1. 组网需求

修改syslog模块中的日志缓冲区可存储的信息条数为512。

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

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

    </capabilities>

</hello>

# 把Syslog模块LogBuffer表中的BufferSize列,改成512。

请将以下报文拷贝、粘贴到客户端:

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

<edit-config>

    <target>

        <running/>

    </target>

    <config>

        <top xmlns="http://www.h3c.com/netconf/config:1.0" web:operation="merge">

            <Syslog>

                <LogBuffer>

                    <BufferSize>512</BufferSize>

                </LogBuffer>

            </Syslog>

        </top>

    </config>

</edit-config>

</rpc>

3. 结果验证

# 如果客户端收到类似如下的报文,则表示操作成功:

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

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

    <ok/>

</rpc-reply>

1.10  配置保存、回滚、加载

使用NETCONF功能,用户可以对设备配置进行保存、回滚和加载操作。

1.10.1  配置保存

1. 客户端发送报文

请将以下报文拷贝、粘贴到客户端,用户即可将设备的当前配置保存到指定名称的文件中,同时该文件将自动作为下次启动配置文件:

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

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

<save>

<file>指定文件的名称</file>

</save>

</rpc>

其中,“指定文件的名称”必须以存储介质的名称开头,后缀为.cfg,配置文件保存路径和文件名称的总长度不能超过191个字符。当报文中存在<file>列时,必须输入指定文件的名称,不能为空;如果不存在该列,则设备会自动将当前配置保存到缺省主用下次启动配置文件中。

2. 结果验证

设备收到配置保存请求后会回应客户端,当客户端收到如下报文时,表示保存成功:

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

    <rpc-reply message-id="100"

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

      <ok/>

</rpc-reply>

1.10.2  配置回滚

1. 客户端发送报文

请将以下报文拷贝、粘贴到客户端,用户即可将设备的当前配置恢复到指定配置文件中的配置:

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

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

<rollback>

 <file>指定文件的名称</file>

</rollback>

</rpc>

其中,“指定文件的名称”必须以存储介质的名称开头,后缀为.cfg,配置文件保存路径和文件名称的总长度不能超过191个字符。

2. 结果验证

设备收到配置回滚请求后会回应客户端,当客户端收到如下报文时,表示配置回滚成功:

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

    <rpc-reply message-id="100"

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

      <ok/>

</rpc-reply>

1.10.3  加载文件

<load>操作执行后,指定文件中的配置会被合并到设备的当前配置中。设备会将指定文件中的配置中的配置和当前配置进行比较:对于指定文件中有,但当前配置中没有的配置,直接运行;对于指定文件中和当前配置中不一致的配置,则用指定文件中的配置替换当前配置中的对应配置。

1. 客户端发送报文

请将以下报文拷贝、粘贴到客户端,用户即可将指定文件中的配置追加到当前配置中:

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

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

  <load>

     <file>指定文件的名称</file>

  </load>

</rpc>

其中,“指定文件的名称”必须以存储介质的名称开头,后缀为.cfg,配置文件保存路径和文件名称的总长度不能超过191个字符。

2. 结果验证

设备收到配置加载请求后会回应客户端,当客户端收到如下报文时,表示配置加载成功:

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

    <rpc-reply message-id="100"

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

      <ok/>

</rpc-reply>

1.10.4  配置保存举例

1. 组网需求

将设备的当前配置保存到配置文件my_config.cfg

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

        <capability>

            urn:ietf:params:netconf:base:1.0

        </capability>

    </capabilities>

</hello>

# 将设备的当前配置保存到配置文件my_config.cfg。

请将以下报文拷贝、粘贴到客户端:

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

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

    <save>

   <file>my_config.cfg</file>

</save>

</rpc>

3. 结果验证

# 如果客户端收到类似如下的报文,则表示操作成功。

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

    <rpc-reply message-id="100"

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

      <ok/>

</rpc-reply>

1.11  数据过滤功能

1.11.1  三种数据过滤方式

当用户执行<get>、<get-bulk>、<get-config>或者<get-bulk-config>操作时,在XML语言中增加过滤条件,可以使用户只看到自己关心的数据。数据过滤包括严格匹配、正则表达式匹配过滤和条件匹配过滤三种。

1. 严格匹配

严格匹配包括两种匹配方式,一种是元素值方式,还有一种是属性名方式。

用户在XML语言中直接指定对应的元素值,设备将对这些值进行严格匹配。如果指定了多个元素的值,则返回同时符合这几个条件的数据。只有完全匹配条件才返回成功。

如下为一个NETCONF报文示例,用于获取所有状态为UP的接口的配置信息:

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

  <get>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0">

        <Ifmgr>

          <Interfaces>

            <Interface>

              <AdminStatus>1</AdminStatus>

            </Interface>

          </Interfaces>

        </Ifmgr>

      </top>

    </filter>

  </get>

</rpc>

当用户在行的位置上放置的某个属性的名称和当前表的某个列的名称一致,则这个属性的值将与用户下发配置中同名称的列的值进行严格匹配,例如,上面例子用属性名方式的等价XML请求为:

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

  <get>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0"xmlns:data="http://www.h3c.com/netconf/data:1.0">

        <Ifmgr>

          <Interfaces>

            <Interface data:AdminStatus="1"/>

          </Interfaces>

        </Ifmgr>

      </top>

    </filter>

  </get>

</rpc>

以上两个NETCONF报文示例说明通过不同的严格匹配方式都可以获取所有状态为UP的接口的索引和指定列信息。

2. 正则表达式匹配

当过滤条件比较复杂时,可以在指定元素上设置regExp属性为一个正则表达式,以完成过滤的目的。

如下为一个NETCONF报文示例,用于获取接口的描述信息,并要求这些描述信息全部为大写字母,不能有其它字符。

<rpc message-id="1-0" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="http://www.h3c.com/netconf/base:1.0">

  <get-config>

    <source>

      <running/>

    </source>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        <Ifmgr>

          <Interfaces>

            <Interface>

              <Description h3c:regExp="[A-Z]*"/>

            </Interface>

          </Interfaces>

        </Ifmgr>

      </top>

    </filter>

  </get-config>

</rpc>

3. 条件匹配

由于正则表达仅能够完成字符匹配,对于数值逻辑的判断过滤实现起来比较麻烦,此时,可使用条件匹配过滤功能。

条件匹配通过在元素中增加match属性完成,属性的值(即过滤条件)可以为数字、字符串。

表1-7 条件匹配命令

操作

命令

说明

大于

match="more:value"

值大于value,支持的数据类型为:日期、数字、字符串

小于

match="less:value"

值小于value,支持的数据类型为:日期、数字、字符串

不小于

match="notLess:value"

值不小于value,支持的数据类型为:日期、数字、字符串

不大于

match="notMore:value"

值不大于value,支持的数据类型为:日期、数字、字符串

等于

match="equal:value"

值等于value,支持的数据类型为:日期、数字、字符串、OID、BOOL

不等于

match="notEqual:value"

值不等于value,支持的数据类型为:日期、数字、字符串、OID、BOOL

包含

match="include:string"

包含字符串string,支持的数据类型为:字符串

不包含

match="exclude:string"

不能包含字符串string,支持的数据类型为:字符串

开始于

match="startWith:string"

以字符串string开头,支持的数据类型为:字符串、OID

结束于

match="endWith:string"

以字符串string结束,支持的数据类型为:字符串

 

如下为一个NETCONF报文示例,用于获取实体扩展信息中CPU利用率大于50%的实体。

<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="http://www.h3c.com/netconf/base:1.0">

  <get>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0">

        <Device>

          <ExtPhysicalEntities>

            <Entity>

                <CpuUsage h3c:match="more:50"></CpuUsage>

            </Entity>

          </ExtPhysicalEntities>

        </Device>

      </top>

    </filter>

  </get>

</rpc>

1.11.2  正则表达式操作举例

1. 组网需求

取Ifmgr模块下Interfaces表下Description列包含冒号的所有数据。

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

        <capability>

            urn:ietf:params:netconf:base:1.0

        </capability>

    </capabilities>

</hello>

# 取Ifmgr模块Interfaces表下Description列包含冒号的所有数据。

请将以下报文拷贝、粘贴到客户端:

<?xml version="1.0"?>

<rpc message-id="100"

     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="http://www.h3c.com/netconf/base:1.0">

  <get>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0">

        <Ifmgr>

          <Interfaces>

            <Interface>

                <Description  reg:regExp=":"/>

            </Interface>

          </Interfaces>

        </Ifmgr>

      </top>

    </filter>

  </get>

</rpc>

3. 结果验证

# 如果客户端收到类似如下的报文,则表示操作成功。

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

<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="http://www.h3c.com/netconf/base:1.0" message-id="100">

    <data>

        <top xmlns="http://www.h3c.com/netconf/data:1.0">

            <Ifmgr>

                <Interfaces>

                    <Interface>

                        <IfIndex>2681</IfIndex>

                        <Description>Ten-GigabitEthernet1/0/1 Interface</Description>

                    </Interface>

                    <Interface>

                        <IfIndex>2682</IfIndex>

                        <Description>Ten-GigabitEthernet1/0/2 Interface</Description>

                    </Interface>

                    <Interface>

                        <IfIndex>2683</IfIndex>

                        <Description>Ten-GigabitEthernet1/0/3 Interface</Description>

                    </Interface>

                    <Interface>

                        <IfIndex>2684</IfIndex>

                        <Description>Ten-GigabitEthernet1/0/4 Interface</Description>

                    </Interface>

                </Interfaces>

            </Ifmgr>

        </top>

    </data>

</rpc-reply>

1.11.3  条件匹配操作举例

1. 组网需求

取Ifmgr模块Interfaces表下ifindex值大于等于5000的Name列信息。

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

        <capability>

            urn:ietf:params:netconf:base:1.0

        </capability>

    </capabilities>

</hello>

#取Ifmgr模块Interfaces表下ifindex值大于等于5000的Name列信息。

请将以下报文拷贝、粘贴到客户端:

<rpc message-id="100"

     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="http://www.h3c.com/netconf/base:1.0">

  <get>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0">

        <Ifmgr>

          <Interfaces>

            <Interface>

                <IfIndex nc:match="more:5000"/>

                <Name/>

            </Interface>

          </Interfaces>

        </Ifmgr>

      </top>

    </filter>

  </get>

</rpc>

3. 结果验证

# 如果客户端收到类似如下的报文,则表示操作成功。

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

<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="http://www.h3c.com/netconf/base:1.0" message-id="100">

    <data>

        <top xmlns="http://www.h3c.com/netconf/data:1.0">

            <Ifmgr>

                <Interfaces>

                    <Interface>

                        <IfIndex>7241</IfIndex>

                        <Name>NULL0</Name>

                    </Interface>

                    <Interface>

                        <IfIndex>7243</IfIndex>

                        <Name>Register-Tunnel0</Name>

                    </Interface>

                </Interfaces>

            </Ifmgr>

        </top>

    </data>

</rpc-reply>

1.12  命令行操作

通过NETCONF功能,用户可以将命令行封装在XML报文中对设备进行操作。

1.12.1  命令行操作

1. 客户端发送报文

当需要给设备发送命令时,请使用格式如下的NETCONF报文:

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

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

      <CLI>

        <Execution>

          命令行

        </Execution>

      </CLI>

</rpc>

一对<Execution>子标签中可以包含多个命令行,一条命令输入完毕,换行,再输入下一条命令即可。

2. 结果验证

设备收到命令行指令后会回应客户端,当客户端收到如下报文时,表示命令行执行成功(注意命令响应被CDATA节点包含):

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

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

  <CLI>

    <Execution>

      <![CDATA[对应命令行响应]]>

    </Execution>

  </CLI>

</rpc-reply>

1.12.2  命令行操作举例

1. 配置需求

向设备发送显示当前配置命令。

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

        <capability>

            urn:ietf:params:netconf:base:1.0

        </capability>

    </capabilities>

</hello>

# 向设备发送显示当前配置命令。

请将以下报文拷贝、粘贴到客户端:

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

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

      <CLI>

        <Execution>

          display current-configuration

        </Execution>

      </CLI>

</rpc>

3. 结果验证

# 如果客户端收到类似如下的报文,则表示操作成功。

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

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

  <CLI>

    <Execution><![CDATA[

<Sysname>display current-configuration

#

 version 7.1.045, ESS 2305                                                     

#                                                                               

 sysname ASBR2                                                                 

#                                                                              

 telnet server enable                                                           

#                                                                              

 irf mac-address persistent timer                                              

 irf auto-update enable                                                        

 undo irf link-delay                                                           

 irf member 1 priority 1

   ]]>

   </Execution>

  </CLI>

</rpc-reply>

1.13  获取会话信息

使用该功能用户可以获取当前设备的所有NETCONF会话信息。

1.13.1   获取会话信息

1.  客户端发送报文

请将以下报文拷贝、粘贴到客户端:

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

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

    <get-sessions/>

</rpc>

2. 结果验证

设备收到命令行指令后会回应客户端,当客户端收到如下报文时,表示命令行执行成功:

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

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

  <get-sessions>

    <Session>

      <SessionID>用户会话ID信息 </SessionID>

      <Line>line信息</Line>

      <UserName>用户登陆名称</UserName>

      <Since>用户登录时间</Since>

      <LockHeld>用户是否持有锁</LockHeld>

    </Session>

  </get-sessions>

</rpc-reply>

1.13.2  获取会话信息举例

1. 配置需求

获取会话信息。

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

        <capability>

            urn:ietf:params:netconf:base:1.0

        </capability>

    </capabilities>

</hello>

# 获取设备上当前存在的NETCONF会话的信息。

请将以下报文拷贝、粘贴到客户端:

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

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

    <get-sessions/>

</rpc>

3. 结果验证

# 如果客户端收到类似如下的报文,则表示操作成功。

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

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

    <get-sessions>

        <Session>

            <SessionID>1</SessionID>

            <Line>vty0</Line>

            <UserName></UserName>

            <Since>2013-01-05T00:24:57</Since>

            <LockHeld>false</LockHeld>

        </Session>

    </get-sessions>

</rpc-reply>

以上信息表明:目前有一个NETCONF连接,SessionID是1,登录用户类型vty0,登录时间是2013-01-05T00:24:57,此用户不持有锁。

1.14  关闭另一个会话

NETCONF支持一个用户关闭除自己外的另一个NETCONF会话,被关闭会话的用户退回到用户视图。

1.14.1  Kill-session操作

1. 客户端发送报文

请将以下报文拷贝、粘贴到客户端,用户即能关闭指定的会话:

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

     <kill-session>

      <session-id>

        指定session-ID

      </session-id>

     </kill-session>

   </rpc>

2. 结果验证

设备收到会话关闭请求后会回应客户端,当客户端收到如下报文时,表示指定会话已经被关闭:

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

    <rpc-reply message-id="100"

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

      <ok/>

</rpc-reply>

1.14.2  Kill-session举例

1. 配置需求

当前有两个NETCONF登录用户,session ID分别是1和2,session ID为1的用户要关闭另一个用户的会话。

2. 配置步骤

# 进入XML视图。

<Sysname> xml

# 进行能力交换。

请将以下报文拷贝、粘贴到客户端:

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

    <capabilities>

        <capability>

            urn:ietf:params:netconf:base:1.0

        </capability>

    </capabilities>

</hello>

# 关闭session ID为2的用户会话。

请将以下报文拷贝、粘贴到客户端:

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

     <kill-session>

       <session-id>2</session-id>

     </kill-session>

   </rpc>

3. 结果验证

如果客户端收到如下报文,则表明session ID为2的NETCONF会话已经被关闭。建立该会话的用户会从XML视图退回到用户视图。

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

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

    <ok/>

</rpc-reply>

1.15  退出XML视图

1. 客户端发送报文

对于处于XML视图的用户,要退回到用户视图,使用命令行来配置设备时,需要将以下报文拷贝、粘贴到客户端:

<?xml version="1.0"?>

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

        <close-session/>

   </rpc>

2. 结果验证

设备收到以上请求后会返回如下报文并退回到用户视图:

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

<rpc-reply message-id="100"

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

   <ok/>

</rpc-reply>

 


2 附录

2.1  附录 A Comware V7中支持的NETCONF操作类型

Comware V7平台对NETCONF标准协议做了一些修订,删除了不常用的操作,增加部分新的操作,如表2-1所示。

表2-1 NETCONF协议支持的操作

操作

说明

XML格式样例

get

获取数据,包括运行状态数据和配置数据

获取Syslog模块的全部数据的XML请求如下:

<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:xc="http://www.h3c.com/netconf/base:1.0">

  <get>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0">

        <Syslog>

        </Syslog>

      </top>

    </filter>

  </get>

</rpc>

get-config

获取配置数据,和get不同,它只返回非缺省的配置数据。如果没有配置数据,则返回一个空的<data>

获取接口表内所有配置的XML请求如下:

<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:xc="http://www.h3c.com/netconf/base:1.0">

  <get-config>

    <source>

      <running/>

    </source>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        <Ifmgr>

                   <Interfaces>

                                      <Interface/>

                   </Interfaces>

        </Ifmgr>

      </top>

    </filter>

  </get-config>

</rpc>

get-bulk

从指定索引的下一条开始批量获取后续N条数据(索引行数据不返回),包括运行状态数据和配置数据。用户通过index属性指定索引,通过count属性指定N。如未指定索引,则以第一条为索引;如未指定N,或者数据表中符合条件的数据记录不足N条,则返回表中所有剩下的数据条目

get操作会返回所有符合条件的数据,这在某些情况下会导致效率问题。get-bulk允许用户从固定数据项开始,向后获取指定条目的数据记录

取全部接口的数据的xml请求如下:

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

  <get-bulk>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0">

        <Ifmgr>

          <Interfaces xc:count="5" xmlns:xc=" http://www.h3c.com/netconf/base:1.0">

                 <Interface/>

          </Interfaces>

        </Ifmgr>

      </top>

    </filter>

  </get-bulk>

</rpc>

get-bulk-config

从指定索引的下一条批量获取配置数据。和get-config类似,只返回非默认配置;其它约束类似get-bulk

获取全部接口配置信息的xml请求如下:

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

  <get-bulk-config>

    <source>

      <running/>

    </source>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        <Ifmgr>

        </Ifmgr>

      </top>

    </filter>

  </get-bulk-config>

</rpc>

edit-config: merge

在当前运行配置的基础上直接运行指定配置

merge操作必须指定具体的操作对象(行):

·     如果指定的对象存在,则直接配置该对象

·     如果指定的对象不存在,但允许创建,则先创建再配置该对象

·     如果指定的对象不存在且不允许创建,则返回merge失败

将BufferSize设置为120的xml请求如下:

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

  <edit-config>

    <target>

      <running/>

    </target>  

    <config>

      <top xmlns="http://www.h3c.com/netconf/config:1.0"><Syslog xmlns="http://www.h3c.com/netconf/config:1.0" xc:operation="merge">

    <LogBuffer>

        <BufferSize>120</BufferSize>

    </LogBuffer>

</Syslog>

      </top>

    </config>

  </edit-config>

</rpc>

edit-config: create

创建指定对象。create操作必须指定配置对象。create操作的XML数据格式和merge类似,只是operation属性需要指定为“create”

·     如果当前配置表支持创建对象,且当前对象不存在,则先创建配置对象,再创建指定的配置

·     如果配置对象下对应的配置项已经存在,则返回data-exist错误

同上,把merge修改为create即可

edit-config: replace

·     如果指定的对象存在,则替换指定对象的配置为当前配置

·     如果指定的对象不存在,但允许创建,则先创建再配置该对象为当前配置

·     如果指定对象不存在且不允许创建,则不进行replace操作,返回invalid-value错误,提示用户配置对象不存在

同上,把merge修改为replace即可

edit-config: remove

删除指定配置

·     当指定的删除对象中只有表索引时,则删除此配置指定对象的所有配置,同时删除指定对象

·     当指定的删除对象中不仅仅有表索引还存在配置项时,则删除此对象下面的指定配置

·     如果系统中指定对象不存在,或者XML消息未指定对象,则直接返回成功

同上,把merge修改为remove即可

edit-config: delete

删除指定配置

·     当指定的删除对象中只有表索引时,则删除此配置指定对象的所有配置,同时删除指定对象

·     当指定的删除对象中不仅仅有表索引还存在配置项时,则删除此对象下面的指定配置

·     如果系统中指定对象不存在,则直接返回不存在的错误消息

同上,把merge修改为delete即可

edit-config 默认操作选项

edit-config操作用于修改当前系统配置。NETCONF定制了四种修改配置的方式:merge、create、delete和replace。当XML消息中未指定修改配置方式的时候,则使用默认操作做为当前指令的操作方式,不会修改默认操作的缺省值

默认操作的缺省值是merge,在XML消息中可以通过<default-operation>节点来设置默认操作,取值为:

·     merge:当配置方式和默认操作方式均未指定时,使用该方式

·     replace:当配置方式未指定,默认操作指定为replace的时候,edit-config操作会默认为replace操作

·     none:当配置方式未指定,默认操作指定为none的时候,edit-config操作会默认为none操作。none操作主要用来检查,下发为none操作的配置仅仅做Schema校验,不进行真正的配置下发。语法检查通过,就返回ok成功,否则失败

下发一个空的操作,该操作仅仅验证格式,并不真正下发给系统,xml请求如下:

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

  <edit-config>

    <target>

      <running/>

    </target>

    <default-operation>none</default-operation>

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

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        <Ifmgr>

          <Interfaces>

            <Interface>

              <Index>262</Index>

              <Description>222222</Description>

            </Interface>

          </Interfaces>

        </Ifmgr>

      </top>

    </config>

  </edit-config>

</rpc>

edit-config默认错误处理选项

edit-config将指定的配置设置到系统上,完成配置设置的操作。在执行edit-config的过程中,如果遇到一个实例配置出错,默认情况下会直接返回错误,但是为了使我们的应用更加灵活,edit-config为我们提供了错误选项,通过错误选项取值的不同,在发生错误的时候进行不同的处理操作

<error-option>节点用于设置一个实例配置出错后,后续实例配置的处理方式,缺省值为stop-on-error,全部取值为:

·     stop-on-error:停止处理,返回错误。此选项为默认选项

·     continue-on-error:继续处理,但是报告错误

·     rollback-on-error:停止并回滚配置。此选项设备暂不支持

下发两个接口的配置,当下发第一个接口的配置发生错误时,继续进行下一个接口配置的下发,XML请求如下:

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

  <edit-config>

    <target>

      <running/>

    </target>   <error-option>continue-on-error</error-option>

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

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        <Ifmgr xc:operation="merge">

          <Interfaces>

            <Interface>

              <Index>262</Index>

              <Description>222</Description>

                <ConfigSpeed>1024</ConfigSpeed>

                <ConfigDuplex>1</ConfigDuplex>

            </Interface>

            <Interface>

              <Index>263</Index>

              <Description>333</Description>

                <ConfigSpeed>1024</ConfigSpeed>

                <ConfigDuplex>1</ConfigDuplex>

            </Interface>

          </Interfaces>

        </Ifmgr>

      </top>

    </config>

  </edit-config>

</rpc>

edit-config测试处理选项

在真正执行edit-config操作时,可指定一个测试选项,使用<test-option>节点来决定当前配置是否真正下发。该节点的缺省值为test-then-set,全部取值为:

·     test-then-set:如果没有错误则将配置设置到系统

·     set:将配置设置到系统

·     test-only:只测试,并不下发配置到系统。语法检查通过,就返回ok成功,否则失败

下发一个接口的配置,仅测试,XML请求如下:

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

  <edit-config>

    <target>

      <running/>

</target> 

<test-option>test-only</test-option>

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

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        <Ifmgr xc:operation="merge">

          <Interfaces>

            <Interface>

              <Index>262</Index>

              <Description>222</Description>

                <ConfigSpeed>100</ConfigSpeed>

                <ConfigDuplex>1</ConfigDuplex>

               </Interface>

          </Interfaces>

        </Ifmgr>

      </top>

    </config>

  </edit-config>

</rpc>

action

下发非配置数据的设置动作,比如,reset操作

清除全部接口的统计信息,XML请求如下:

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

  <action>

    <top xmlns="http://www.h3c.com/netconf/action:1.0">

      <Ifmgr>

            <ClearAllIfStatistics>

                <Clear>

                </Clear>

        </ClearAllIfStatistics>

      </Ifmgr>

    </top>

  </action>

</rpc>

lock

锁保护的是配置数据,即edit-config中可以指定的那些模块的配置数据,其它操作不受锁的限制

用户通过NETCONF加锁操作锁定NETCONF连接后,其他用户既不能使用NETCONF执行下发配置操作,也不能通过CLI或SNMP等其他配置方式对设备进行配置

禁止NETCONF会话修改设备的当前配置,XML请求如下:

<rpc message-id="100"

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

 <lock>

    <target>

        <running/>

    </target>

</lock>

</rpc>

unlock

取消锁保护

当会话结束时锁也会被自动释放

取消锁保护,允许NETCONF会话修改设备的当前配置:

<rpc message-id="100"

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

<unlock>

    <target>

        <running/>

    </target>

</unlock>

</rpc>

get-sessions

获取当前系统中所有NETCONF会话的信息(不能指定sessions-ID)

获取当前系统中所有NETCONF会话的信息:

<rpc message-id="100"

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

<get-sessions/>

</rpc>

close-session

关闭当前NETCONF会话,并释放锁和这个session用到的内部资源(如内存等),退出XML视图

关闭当前NETCONF会话,并释放锁和这个session用到的内部资源(如内存等),退出XML视图

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

<close-session/>

</rpc>

kill-session

关闭其他NETCONF会话,不支持关闭用户自己的NETCONF会话

关闭session-id为1的NETCONF会话:

<rpc message-id="100"

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

<kill-session>

      <session-id>1</session-id>

  </kill-session>

</rpc>

CLI

执行命令行的命令。请求消息将命令行语句封装在<CLI>标签中,命令行输出信息被封装在<CLI>标签中返回

CLI支持Configuration和Exec两种方式:

l     Execution:在用户视图下执行

l     Configuration:在系统视图下执行

对于其它视图下命令,则需要在Configuration下先指定进子视图的命令,在指定配置命令

在系统视图下执行display this命令:

<rpc message-id="100"

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

  <CLI>

        <Configuration>display this</Configuration>

  </CLI>

</rpc>

save

保存系统运行配置。save操作可以使用子元素<file>来指定保存的配置文件名称。当save操作中不存在子元素<file>列时,则设备会将当前运行配置保存到主用下次启动配置文件中

将设备当前配置保存到文件test.cfg中:

<rpc message-id="100"

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

    <file>test.cfg</file>

  </save>

</rpc>

load

配置加载。<load>操作执行后,指定文件中的配置会被合并到设备的当前配置中

将文件a1.cfg中的配置合并到设备的当前配置中:

<rpc message-id="100"

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

    <file>a1.cfg</file>

  </load>

</rpc>

rollback

配置回滚。<rollback>操作必须使用子元素<file>来指定需要回滚的配置文件名称<rollback>操作执行后,当前系统运行配置会被完全替换为指定文件中所描述的配置

将设备当前配置回退到文件1A.cfg中配置的状态:

<rpc message-id="100"

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

<rollback>

    <file>1A.cfg</file>

</rollback>

</rpc>

 

不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!

新华三官网
联系我们