分享

H3C NETCONF简介

 法律安全 2019-10-16

1 NETCONF

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

Console/Telnet/SSH/HTTP/HTTPS /TLS

通信协议层为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

1.1.2  NETCONF报文格式

1. NETCONF

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

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

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

如下为一个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./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(Document Type Definition,文件类型定义)引用。

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

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

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

<env:Header>

<auth:Authentication env:mustUnderstand="1" xmlns:auth="http://www./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./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功能是否运行正常。

·     用户可以通过HTTP、HTTPS登录到设备的Web页面,系统会自动将Web页面的配置转换成NETCONF指令下发给设备来实现对设备的访问;该方式为NETCONF最普遍的使用方式,用户在简洁易用的图像化Web页面上完成配置,配置结果也会以简洁清晰的方式呈现给用户,整个NETCONF的交互过程对用户透明。

·     用户使用自己开发的Web配置工具给设备下发NETCONF指令来实现对设备的访问。因为用户开发的Web页面的URL和设备出厂支持的Web页面的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 配置NETCONF over SOAP功能

操作

命令

说明

进入系统视图

system-view

-

开启基于HTTP的NETCONF over SOAP功能

netconf soap http enable

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

开启基于HTTPS的NETCONF over SOAP功能

netconf soap https enable

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

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

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

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

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

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

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

配置NETCONF用户的强制认证域

netconf soap domain domain-name

缺省情况下,未配置NETCONF用户的强制认证域。关于认证域的详细介绍请参见“安全配置指导”中的“AAA”

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信息,完成能力集的交互后,设备才会处理客户端发送的其他请求。

·     设备同一时间内允许建立的最大连接数可以通过aaa session-limit命令配置,关于该命令的详细描述,请参见“安全配置指导”中的“AAA”。用户数超过上限后,新登录的用户将登录失败。

·     多个用户同时进行NETCONF配置时,可能会导致用户请求与配置结果不一致,因此,请避免多个用户同时进行NETCONF配置。

1.6.1  配置NETCONF会话超时时间

用户通过Telnet、SSH、Console、或配置工具与设备建立NETCONF连接,如果在超时时间内,用户与设备无任何NETCONF报文交互,达到超时时间后,设备将断开与用户配置端的NETCONF连接。

表1-6 配置NETCONF会话超时时间

操作

命令

说明

进入系统视图

system-view

-

配置NETCONF会话超时时间

netconf { soap | agent } idle-timeout minute

缺省情况如下:

·     基于NETCONF over SOAP over HTTP/HTTPS的会话超时时间为10分钟

·     基于NETCONF over SSH/Telnet/Console的会话超时时间为0,即不超时

1.6.2  进入XML视图

表1-7 进入XML视图

操作

命令

说明

进入XML视图

xml

该命令在用户视图下执行

说明

·     进入XML视图后,用户需要严格按照NETCONF报文格式将报文拷贝、粘贴到XML视图中。在NETCONF配置过程中,请勿进行其他任何操作(例如手工输入NETCONF报文),否则可能导致NETCONF配置失败。

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

1.6.3  交换能力集

进入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="101" 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./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="101" 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="101" 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="101" 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="101">

<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./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./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="101" 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="101"

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="101" 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="101"

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="101" 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="101"

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

<ok/>

</rpc-reply>

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

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

<rpc-reply message-id="101" 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./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 ="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:xc="http://www./netconf/base:1.0">

<get-bulk>

<filter type="subtree">

<top xmlns="http://www./netconf/data:1.0" xmlns:base="http://www./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、Web等。<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./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./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="101">

<data>

<top xmlns="http://www./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>

<Fundamentals>

<WebUI>

<SessionAgingTime>98</SessionAgingTime>

</WebUI>

</Fundamentals>

</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./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="101">

<data>

<top xmlns="http://www./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="101" 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./netconf/data:1.0" xmlns:web="http://www./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="101">

<data>

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

<Ifmgr>

<Interfaces>

<Interface>

<IfIndex>3</IfIndex>

<Name>GigabitEthernet1/0/2</Name>

<AbbreviatedName>GE1/0/2</AbbreviatedName>

<PortIndex>3</PortIndex>

<ifTypeExt>22</ifTypeExt>

<ifType>6</ifType>

<Description>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="101" 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./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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<save OverWrite="false">

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

</save>

</rpc>

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

OverWrite标志的默认取值为true。缺省情况下,当指定的配置文件名与原有配置文件名相同时,原文件将被覆盖,当前配置保存成功。如果指定OverWrite的值为false,则当指定的配置文件名与原有配置文件名相同时,当前配置保存失败,同时返回错误提示信息。

2. 结果验证

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

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

<rpc-reply message-id="101"

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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<rollback>

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

</rollback>

</rpc>

2. 结果验证

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

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

<rpc-reply message-id="101"

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

<ok/>

</rpc-reply>

1.10.3  运行配置回滚

设备支持对当前正在运行的配置进行回滚,配置回滚点后,设备可以在如下场景下进行配置回滚:

·     NETCONF客户端主动下发配置回滚指令。

·     NETCONF客户端在指定的时间内无任何指令,即NETCONF会话空闲时间超过配置的回滚空闲超时时间。

·     NETCONF客户端和设备间的连接异常断开。

配置回滚步骤如下:

说明

如果存在多个NETCONF会话同时配置设备,建议配置回滚前先用<lock>锁定系统,否则可能导致设备运行配置与回滚前配置不一致。

(1)     对当前系统加锁。

(2)     下发<save-point>/<begin>操作进行配置回滚点标记。

(3)     下发<edit-config>操作,对设备进行所需配置。

(4)     下发<save-point>/<commit>进行配置确认,可分多次修改配置并确认。

(5)     下发<save-point>/<rollback>进行配置回滚,可选择对应的一次commit进行配置回滚,或者等待NETCONF会话空闲时间超过配置的回滚空闲超时时间而自动进行配置回滚到最近使用的commit的配置。

(6)     下发<save-point>/<end>结束配置回滚功能。

(7)     对当前系统解锁。

1. 启动配置回滚功能,标识起始回滚点

(1)     客户端发送报文

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

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

<save-point>

<begin>

<confirm-timeout>100</confirm-timeout>

</begin>

</save-point>

</rpc>

回滚空闲超时时间<confirm-timeout>为可选,取值范围为1~65535,单位为秒,缺省为600秒。

(2)     验证结果

当客户端收到如下报文时,表示配置回滚点成功:

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

<data>

<save-point>

<commit>

<commit-id>1</commit-id>

</commit>

</save-point>

</data>

</rpc-reply>

2. 主动下发配置回滚

(1)     客户端发送报文

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

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

<save-point>

<rollback>

<commit-id/>

<commit-index/>

<commit-label/>

</rollback>

</save-point>

</rpc>

<commit-id/>、<commit-index/>、<commit-label/>任选一个,或者不选时回滚此前最近使用的commit的配置。其中commit-id为系统唯一标识的commit编号。commit-index表示最近50次的commit,0表示最近一次下发commit,49表示最远一次commit。commit-label为标签,不同的commit标签不能相同,可以没有标签。

(2)     验证结果

当客户端收到如下报文时,表示主动下发配置回滚成功:

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

<ok></ok>

</rpc-reply>

3. 主动下发配置确认

下发<save-point>/<commit>操作接受当前配置。使能save-point后,系统支持最近50个commit回滚点的配置回滚。超过50个回滚点后,进行commit操作时需指定force属性强制覆盖最早的回滚点。

(1)     客户端发送报文

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

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

<save-point>

<commit>

<label>SUPPORT VLAN<label>

<comment>vlan 1 to 100 and interfaces. Each vlan used for different custom as fllows: ……</comment>

</commit>

</save-point>

</rpc>

<label/>和<comment/>可选。

(2)     验证结果

当客户端收到如下报文时,表示主动下发配置确认成功:

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

<data>

<save-point>

<commit>

<commit-id>2</commit-id>

</commit>

</save-point>

</data>

</rpc-reply>

4. 取消配置回滚

下发<save-point>/<end>操作取消配置回滚。

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

<save-point>

<end/>

</save-point>

</rpc>

(1)     客户端发送报文

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

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

<save-point>

<end/>

</save-point>

</rpc>

(2)     验证结果

当客户端收到如下报文时,返回对应的end结果成功。

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

<ok/>

</rpc-reply>

5. 获取系统的commit回滚点的记录。

下发<save-point>/<get-commits>操作获取commit的操作记录。

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

<save-point>

<get-commits>

<commit-id/>

<commit-index/>

<commit-label/>

</get-commits>

</save-point>

</rpc>

<commit-id>,<commit-index>,<commit-label>任选一个,也可以都不选,显示所有的commit记录。

(1)     客户端发送报文

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

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

<save-point>

<get-commits>

<commit-label>SUPPORT VLAN</commit-label>

</get-commits>

</save-point>

</rpc>

(2)     验证结果

当客户端收到如下报文时,返回对应的commit操作记录:

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

<data>

<save-point>

<commit-information>

<CommitID>2</CommitID>

<TimeStamp>Thu Oct 30 11:30:28 1980</TimeStamp>

<UserName>test</UserName>

<Label>SUPPORT VLAN</Label>

</commit-information>

</save-point>

</data>

</rpc-reply>

6. 获取系统commit回滚点的配置

下发<save-point>/<get-commit-information>操作获取对应的commit操作时的配置。

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

<save-point>

<get-commit-information>

<commit-information>

<commit-id/>

<commit-index/>

<commit-label/>

</commit-information>

<compare-information>

<commit-id/>

<commit-index/>

<commit-label/>

</compare-information

</get-commit-information>

</save-point>

</rpc>

<commit-id/>,<commit-index/>,<commit-label/>任选一个。<compare-information/>可选。

<get-commit-information>不输入参数显示最近的使用的commit配置。

(1)     客户端发送报文

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

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

<save-point>

<get-commit-information>

<commit-information>

<commit-label>SUPPORT VLAN</commit-label>

</commit-information>

</get-commit-information>

</save-point>

</rpc>

(2)     验证结果

当客户端收到如下报文时,显示对应的配置信息:

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

<data>

<save-point>

<commit-information>

<content>

interface vlan 1

</content>

</commit-information>

</save-point>

</data>

</rpc-reply>

1.10.4  加载文件

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

需要注意的是,如果只有删除设备中一些现有的配置才能使指定文件中的某些配置生效,则需要先删除现有配置后再加载文件,否则这些配置无法生效。

1. 客户端发送报文

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

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

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

<load>

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

</load>

</rpc>

其中,“指定文件的名称”必须以存储介质的名称开头,后缀为.cfg。

2. 结果验证

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

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

<rpc-reply message-id="101"

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

<ok/>

</rpc-reply>

1.10.5  配置保存举例

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="101" 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="101"

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

<ok/>

</rpc-reply>

1.11  数据过滤功能

当用户执行<get>、<get-bulk>、<get-config>或者<get-bulk-config>操作时,在XML语言中增加过滤条件,可以使用户只看到自己关心的数据。数据过滤包括基于表的过滤和基于列的过滤:

·     基于表的过滤用于过滤表的信息。

·     基于列的过滤用于过滤单个列的信息。

基于表的过滤需要在基于列的过滤之前配置。

1.11.1  基于表的过滤

基于表的过滤中,过滤条件类似命令行,命令空间为http://www./netconf/base:1.0,属性名为filter。关于支持该过滤方式表的详细信息,具体请参见模块的XML API手册。

如下要求返回IPv4路由表中匹配VRF名称为vrf1,1.1.1.0和24位掩码最长的数据:

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

<get>

<filter type="subtree">

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

<Route>

<Ipv4Routes>

<RouteEntry h3c:filter=”vrf vrf1 IP 1.1.1.0 MaskLen 24 longer”/>

</Ipv4Routes>

</Route>

</top>

</filter>

</get>

</rpc>

仅基于表的过滤支持该配置,查询条件必须写在行的属性上。

1.11.2  基于列的过滤

基于列的过滤包括严格匹配、正则表达式匹配过滤和条件匹配过滤。同时指定多种过滤条件时,只有一个生效,其优先级从高到底依次为:严格匹配过滤、正则表达式匹配过滤和条件匹配过滤。

1. 严格匹配过滤

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

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

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

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

<get>

<filter type="subtree">

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

<Ifmgr>

<Interfaces>

<Interface>

<AdminStatus>2</AdminStatus>

</Interface>

</Interfaces>  

</Ifmgr>

</top>

</filter>

</get>

</rpc>

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

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

<get>

<filter type="subtree">

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

<Ifmgr>

<Interfaces>

<Interface data:AdminStatus="2"/>

</Interfaces>

</Ifmgr>

</top>

</filter>

</get>

</rpc>

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

2. 正则表达式匹配过滤

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

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

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

<get-config>

<source>

<running/>

</source>

<filter type="subtree">

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

<Ifmgr>

<Interfaces>

<Interface>

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

</Interface>

</Interfaces>

</Ifmgr>

</top>

</filter>

</get-config>

</rpc>

下列数据类型支持正则表达式匹配:各种整数、各种日期和时间、各种字符串、IPv4地址、IPv4掩码、IPv6地址、MAC地址、OID、时区。

3. 条件匹配过滤

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

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

表1-8 条件匹配命令

操作

命令

说明

大于

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./netconf/base:1.0">

<get>

<filter type="subtree">

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

<Device>

<ExtPhysicalEntities>

<Entity>

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

</Entity>

</ExtPhysicalEntities>

</Device>

</top>

</filter>

</get>

</rpc>

1.11.3  正则表达式操作举例

1. 组网需求

取Ifmgr模块下Interfaces表下Description列包含Ten-Gigabit的所有数据。

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列包含Ten-Gigabit的所有数据。

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

<?xml version="1.0"?>

<rpc message-id="100"

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

<get>

<filter type="subtree">

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

<Ifmgr>

<Interfaces>

<Interface>

<Description  reg:regExp="Ten-Gigabit"/>

</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:reg="http://www./netconf/base:1.0" message-id="100">

<data>

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

<Ifmgr>

<Interfaces>

<Interface>

<IfIndex>2681</IfIndex>

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

</Interface>

<Interface>

<IfIndex>2685</IfIndex>

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

</Interface>

<Interface>

<IfIndex>2689</IfIndex>

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

</Interface>

</Interfaces>

</Ifmgr>

</top>

</data>

</rpc-reply>

1.11.4  条件匹配操作举例

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:nc="http://www./netconf/base:1.0">

<get>

<filter type="subtree">

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

<Ifmgr>

<Interfaces>

<Interface>

<IfIndex nc:match="notLess: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:nc="http://www./netconf/base:1.0" message-id="100">

<data>

<top xmlns="http://www./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="101" 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="101" 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="101" 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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<CLI>

<Execution><![CDATA[

<Sysname>display current-configuration

#

version 7.1.052, Demo 2501005

#

sysname Sysname

#

ftp server enable

ftp update fast

ftp timeout 2000

#

irf mac-address persistent timer

irf auto-update enable

undo irf link-delay

#

domain default enable system

#

telnet server enable

#

vlan 1

#

vlan 1000

#

radius scheme system

primary authentication 127.0.0.1 1645

#

return

]]>

</Execution>

</CLI>

</rpc-reply>

1.13  获取会话信息

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

1.13.1   获取会话信息

1. 客户端发送报文

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

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

<rpc message-id="101" 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="101" 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="101" 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="101">

<get-sessions>

<Session>

<SessionID>1</SessionID>

<Line>vty0</Line>

<UserName></UserName>

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

<LockHeld>false</LockHeld>

</Session>

</get-sessions>

</rpc-reply>

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

1.14  关闭另一个会话

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

1.14.1  Kill-session操作

1. 客户端发送报文

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

<rpc message-id="101"    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="101"

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="101"    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="101"  xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<ok/>

</rpc-reply>

1.15  退出XML视图

1. 客户端发送报文

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

<rpc message-id="101" 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="101"

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

<ok/>

</rpc-reply>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约