06-NETCONF配置
本章节下载: 06-NETCONF配置 (504.19 KB)
设备运行于FIPS模式时,本特性的部分配置相对于非FIPS模式有所变化,具体差异请见本文相关描述。有关FIPS模式的详细介绍请参见“安全配置指导”中的“FIPS”。
NETCONF(Network Configuration Protocol,网络配置协议)是一种基于XML的网络管理协议,它提供了一种可编程的、对网络设备进行配置和管理的方法。用户可以通过该协议设置参数、获取参数值、获取统计信息等。
NETCONF报文使用XML格式,具有强大的过滤能力,而且每一个数据项都有一个固定的元素名称和位置,这使得同一厂商的不同设备具有相同的访问方式和结果呈现方式,不同厂商之间的设备也可以经过映射XML得到相同的效果,这使得它在第三方软件的开发上非常便利,很容易开发出在混合不同厂商、不同设备的环境下的特殊定制的网管软件。在这样的网管软件的协助下,使用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 |
· 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>
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>
用户可通过以下三种方式来使用NETCONF协议配置/管理设备:
· 用户可以通过Telnet、SSH、Console登录到设备的CLI界面,通过命令行界面编辑下发NETCONF指令。该方式一般用于研发和测试环境。在XML视图下,将合法的NETCONF报文直接拷贝、粘贴到命令行提示符处,即可验证设备的NETCONF功能是否运行正常。
· 非FIPS模式下,用户可以通过HTTP、HTTPS登录到设备的Web页面,系统会自动将Web页面的配置转换成NETCONF指令下发给设备来实现对设备的访问;FIPS模式下,用户可以通过HTTPS登录到设备的Web页面,系统会自动将Web页面的配置转换成NETCONF指令下发给设备来实现对设备的访问。该方式为NETCONF最普遍的使用方式,用户在简洁易用的图像化Web页面上完成配置,配置结果也会以简洁清晰的方式呈现给用户,整个NETCONF的交互过程对用户透明。
· 用户使用自己开发的Web配置工具给设备下发NETCONF指令来实现对设备的访问。因为用户开发的Web页面的URL和设备出厂支持的Web页面的URL不一致,用户需要将下发NETCONF指令用SOAP封装成一种通用的格式,以便设备能够正常转换。因此,使用该方式前必须使能NETCONF over SOAP功能。
与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配置任务简介
配置任务 |
说明 |
详细配置 |
使能NETCONF over SOAP功能 |
可选 |
|
使能NETCONF over SSH功能 |
可选 |
|
建立NETCONF会话 |
必选 |
|
向设备进行事件订阅 |
可选 |
|
给当前配置加锁/解锁 |
可选 |
|
<get>/<get-bulk>获取信息 |
可选 |
|
<get-config>/<get-bulk-config>获取配置信息 |
可选 |
|
<edit-config>编辑指定模块数据 |
可选 |
|
配置保存、回滚、加载 |
可选 |
|
通配符和过滤器功能 |
可选 |
|
命令行操作 |
可选 |
|
获取会话信息 |
可选 |
|
关闭另一个会话 |
可选 |
|
退出XML视图 |
可选 |
NETCONF支持封装成SOAP报文后通过HTTP、HTTPS协议传输,即NETCONF over SOAP over HTTP/HTTPS,使用该功能后,用户可以通过开发Web配置工具给设备下发NETCONF指令来实现对设备的访问。
表1-3 配置SOAP服务
操作 |
命令 |
说明 |
使能HTTP的SOAP功能 |
netconf soap http enable |
该命令在系统视图下执行 FIPS模式下,不支持本命令 缺省情况下,基于HTTP的SOAP功能处于关闭状态 |
使能HTTPS的SOAP功能 |
netconf soap https enable |
该命令在系统视图下执行 缺省情况下,基于HTTPS的SOAP功能处于关闭状态 |
NETCONF支持标准协议规范中描述的NETCONF over SSH功能,使能该功能后,用户可以通过使用支持NETCONF over SSH登录方式的客户端配置工具给设备下发NETCONF指令来实现对设备的访问。
指定NETCONF over SSH的监听端口 |
缺省情况下,NETCONF over SSH使用端口830 |
|
缺省情况下,NETCONF over SSH功能处于关闭状态 |
· 客户端必须给设备发送hello信息,完成能力集的交互后,设备才会处理客户端发送的其它请求。
· 设备同一时间内允许建立的最大连接数可以通过aaa session-limit命令配置,关于该命令的详细描述,请参见“安全命令参考”中的“AAA”。用户数超过上限后,新登录的用户将登录失败。
表1-5 进入XML视图
操作 |
命令 |
说明 |
进入XML视图 |
xml |
该命令在用户视图下执行 |
进入XML视图后,客户端和设备必须交换各自支持的能力集,双方收到对方的能力集后才可以进行下一步操作。
客户端进入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:ietf:params:netconf:capability:h3c-netconf-ext:1.0</capability></capabilities><session-id>1</session-id></hello>]]>]]>
其中:
· <capabilities>和</capabilities>之间的内容表示设备支持的能力集。
· <session-id>和</session-id>之间的内容表示为本次会话分配的会话ID,用来唯一标识本次会话。
客户端收到设备发送的能力集协商报文后,需要给设备发送如下格式的报文,告知设备客户端支持哪些NETCONF能力集。
Hello协商报文格式如下:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
capability-set
</capability>
</capabilities>
</hello>
其中,capability-set表示客户端支持的能力集,由用户定义。一个<capability>和</capability>选项对中填写一个能力集,可以使用多个选项对,发送多个能力集。
用户向设备订阅事件后,设备上发生用户订阅的事件时,设备会自动向订阅的客户端发送事件的相关信息,信息内容包括事件的code、group、severity以及发生时间和描述信息。此处可订阅的事件,即系统支持的日志信息。具体可以订阅哪些模块的事件,请参见《日志信息参考手册》。
需要注意的是:
· 订阅只对当前连接生效。如果连接断开,订阅会自动取消。
· 多次发送订阅报文,可以订阅多个事件。
事件订阅报文格式如下:
<?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.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表示结束订阅的时间
设备收到订阅报文后会回应客户端,当客户端收到如下报文时,表示订阅成功:
<?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。
客户端订阅没有时间限制的全部事件。订阅后在断开连接之前,设备发生的所有事件都会发送给客户端。
# 进入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>
# 如果客户端收到如下报文,则表示订阅成功:
<?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.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>
因为设备同时最多能建立5个NETCONF连接,即最多支持5个用户同时使用NETCONF功能管理和监控设备。所以,当用户管理、维护设备或者定位网络问题时,为防止其他NETCONF用户修改当前配置、引入干扰,可以使用本特性给当前配置加锁。给当前配置加锁后,只有持有锁的用户可以修改设备的当前配置,其他NETCONF用户只能读取,不能修改当前配置。
只有持有锁的用户可以解锁,解锁后其他用户才可以修改设备的当前配置或另外加锁。如果持有锁的用户的当前连接断开,系统会自动解锁。
目前设备只支持对当前配置加锁,不能对具体的功能模块进行加锁。请将以下报文拷贝、粘贴到客户端,用户即能完成加锁操作:
<?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>
设备收到加锁报文后会回应客户端,当客户端收到如下报文时,表示加锁成功:
<?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 message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<unlock>
<target>
<running/>
</target>
</unlock>
</rpc>
设备收到解锁报文后会回应客户端,当客户端收到如下报文时,表示解锁成功:
<?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语言修改设备的当前配置。
# 进入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>
# 如果客户端收到如下报文,则表示加锁成功:
<?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, lock is already held.</error-message>
<error-info>
<session-id>1</session-id>
</error-info>
</rpc-error>
</rpc-reply>
以上报文表明:加锁失败,session-id是1的用户已经持有锁。
NETCONF支持用户对设备进行业务操作,包括对指定信息的获取和修改。基本标签有<get>、<get-bulk>、<get-config>、<get-bulk-config>和<edit-config>,分别用来获取所有数据、获取配置数据和编辑指定模块的数据。详细规则参见《NETCONF XML API 手册》。
<get>操作用来获取数据,包括运行状态数据和配置数据。
<get-bulk>操作用来从指定索引的下一条开始批量获取后续N条数据(索引行数据不返回),包括运行状态数据和配置数据。用户通过index属性由指定索引,通过count属性指定N。如未指定索引,则以第一条为索引;如未指定N,或者数据表中符合条件的数据记录不足N条,则返回表中所有剩下的数据条目。
<get>操作会返回所有符合条件的数据,在某些情况下,会导致获取数据效率不高。<get-bulk>允许用户从固定数据项开始,向后获取指定条目的数据记录。
<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 ="101" 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,则获取出从指定索引开始的所有数据。
设备收到配置获取请求报文后会将相应参数的值通过如下报文反馈给客户端:
<?xml version="1.0"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
全部配置数据和状态数据
</data>
</rpc-reply>
<get-config>和<get-bulk-config>用来获取系统中所有可配置的变量的值,配置的方式包括CLI、MIB、Web等。<get-config>和<get-bulk-config>操作报文中可以包含子标签<filter>,用来对要获取的信息进行过滤。
<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>
设备收到配置获取请求报文后会将相应配置通过如下报文反馈给客户端:
<?xml version="1.0"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
所有指定filter内的数据
</data>
</rpc-reply>
<edit-config>支持如下选项:merge、create、replace、remove、delete、默认操作选项、默认错误处理选项、测试处理,关于这些选项的详细描述请参见“2.1 附录 A Comware V7中支持的NETCONF操作类型”。
<?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>
· 设备收到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操作设置的值一致。
获取所有模块所有配置数据。
# 进入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>
# 如果客户端收到类似如下的报文,则表示操作成功:
<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.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>
<Fundamentals>
<WebUI>
<SessionAgingTime>98</SessionAgingTime>
</WebUI>
</Fundamentals>
</top>
</data>
</rpc-reply>
获取Syslog模块的所有配置数据
# 进入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>
# 如果客户端收到类似如下的报文,则表示操作成功:
<?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.h3c.com/netconf/config:1.0">
<Syslog>
<LogBuffer>
<BufferSize>120</BufferSize>
</LogBuffer>
</Syslog>
</top>
</data>
</rpc-reply>
取接口表的一条数据
# 进入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.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>
# 如果客户端收到类似如下的报文,则表示操作成功:
<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.h3c.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<IfIndex>1302</IfIndex>
<Name>GigabitEthernet6/0/2</Name>
<AbbreviatedName>GE6/0/2</AbbreviatedName>
<PortIndex>3</PortIndex>
<ifTypeExt>22</ifTypeExt>
<ifType>6</ifType>
<Description>GigabitEthernet6/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>
修改syslog模块中的日志缓冲区可存储的信息条数为512。
# 进入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.h3c.com/netconf/config:1.0" web:operation="merge">
<Syslog>
<LogBuffer>
<BufferSize>512</BufferSize>
</LogBuffer>
</Syslog>
</top>
</config>
</edit-config>
</rpc>
# 如果客户端收到类似如下的报文,则表示操作成功:
<?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>
Comware V7 NETCONF支持会话在空闲一段时间、或者某些情况导致无法继续会话时进行配置回滚。
· 当前会话已经存在配置回滚点的情况下,配置回滚在下面几个情况下发生:
· NETCONF客户端主动下发配置回滚指令。
· NETCONF客户端在指定的时间内无任何指令。
· NETCONF客户端和设备的长连接断开。
(1) 对当前系统加锁(推荐)。
(2) 下发save-point/begin功能进行配置回滚点标记。
(3) 下发NETCONF edit-config操作。
(4) 下发save-point/commit接受当前配置,或者下发save-point/rollback进行配置回滚,或者因为操作空闲超过配置的回滚空闲超时时间而自动进行配置回滚。
(5) 对当前系统解锁(推荐)。
请将以下报文拷贝、粘贴到客户端:
<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>为可选,单位为秒,如果不指定,缺省为600秒。当前会话已经存在配置回滚点时不能继续设置新的配置回滚点,必须先撤销原来的或者等待超时回滚后。
因为多个会话并行使用配置回滚功能可能在配置回滚时可能使系统状态不一致,如果存在多个会话同时配置的情况,建议下发前先用lock锁定系统。
当客户端收到如下报文时,表示成功:
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok></ok>
</rpc-reply>
请将以下报文拷贝、粘贴到客户端:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<rollback>
</rollback>
</save-point>
</rpc>
当客户端收到如下报文时,表示成功:
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok></ok>
</rpc-reply>
请将以下报文拷贝、粘贴到客户端:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<commit>
</commit>
</save-point>
</rpc>
当客户端收到如下报文时,表示成功:
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok></ok>
</rpc-reply>
使用NETCONF功能,用户可以对设备配置进行保存、回滚和加载操作。
请将以下报文拷贝、粘贴到客户端,用户即可将设备的当前配置保存到指定名称的文件中,同时该文件将自动作为下次启动配置文件:
<?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,则当指定的配置文件名与原有配置文件名相同时,当前配置保存失败,同时返回错误提示信息。
设备收到配置保存请求后会回应客户端,当客户端收到如下报文时,表示保存成功:
<?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 message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<rollback>
<file>指定文件的名称</file>
</rollback>
</rpc>
设备收到配置回滚请求后会回应客户端,当客户端收到如下报文时,表示配置回滚成功:
<?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>
<load>操作执行后,指定文件中的配置会被合并到设备的当前配置中。设备会将指定文件中的配置中的配置和当前配置进行比较:对于指定文件中有,但当前配置中没有的配置,直接运行;对于指定文件中和当前配置中不一致的配置,则用指定文件中的配置替换当前配置中的对应配置。
请将以下报文拷贝、粘贴到客户端,用户即可将指定文件中的配置追加到当前配置中:
<?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。如果不指定文件名,则缺省保存到主用下次启动配置文件中。
设备收到配置加载请求后会回应客户端,当客户端收到如下报文时,表示配置加载成功:
<?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>
将设备的当前配置保存到配置文件my_config.cfg。
# 进入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>
# 如果客户端收到类似如下的报文,则表示操作成功。
<?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>
当用户执行<get>、<get-bulk>、<get-config>或者<get-bulk-config>操作时,在XML语言中增加过滤条件,可以使用户只看到自己关心的数据。数据过滤包括严格匹配、正则表达式匹配过滤和条件匹配过滤三种。需要注意的是,同时指定多种过滤条件,则只能生效一个,其优先级从高到底依次为:严格匹配、正则表达式匹配过滤和条件匹配过滤。
严格匹配包括两种匹配方式,一种是元素值方式,还有一种是属性名方式。
用户在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.h3c.com/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.h3c.com/netconf/data:1.0"xmlns:data=" http://www.h3c.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface data:AdminStatus="2" />
</Interfaces>
</Ifmgr>
</top>
</filter>
</get>
</rpc>
以上两个NETCONF报文示例说明通过不同的严格匹配方式都可以获取所有状态为UP的接口配置信息。
当过滤条件比较复杂时,可以在指定元素上设置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>
由于正则表达仅能够完成字符匹配,对于数值逻辑的判断过滤实现起来比较麻烦,此时,可使用条件匹配过滤功能。
条件匹配通过在元素中增加match属性完成,属性的值(即过滤条件)可以为数字、字符串。
表1-6 条件匹配命令
操作 |
命令 |
说明 |
大于 |
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>
取Ifmgr模块下Interfaces表下Description列包含冒号的所有数据。
# 进入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:reg="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>
# 如果客户端收到类似如下的报文,则表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:reg="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-GigabitEthernet6/0/49:1 Interface</Description>
</Interface>
<Interface>
<IfIndex>2682</IfIndex>
<Description>Ten-GigabitEthernet6/0/49:2 Interface</Description>
</Interface>
<Interface>
<IfIndex>2683</IfIndex>
<Description>Ten-GigabitEthernet6/0/49:3 Interface</Description>
</Interface>
<Interface>
<IfIndex>2684</IfIndex>
<Description>Ten-GigabitEthernet6/0/49:4 Interface</Description>
</Interface>
<Interface>
<IfIndex>2685</IfIndex>
<Description>Ten-GigabitEthernet6/0/50:1 Interface</Description>
</Interface>
<Interface>
<IfIndex>2686</IfIndex>
<Description>Ten-GigabitEthernet6/0/50:2 Interface</Description>
</Interface>
<Interface>
<IfIndex>2687</IfIndex>
<Description>Ten-GigabitEthernet6/0/50:3 Interface</Description>
</Interface>
<Interface>
<IfIndex>2688</IfIndex>
<Description>Ten-GigabitEthernet6/0/50:4 Interface</Description>
</Interface>
<Interface>
<IfIndex>2689</IfIndex>
<Description>Ten-GigabitEthernet6/0/51:1 Interface</Description>
</Interface>
<Interface>
<IfIndex>2690</IfIndex>
<Description>Ten-GigabitEthernet6/0/51:2 Interface</Description>
</Interface>
<Interface>
<IfIndex>2691</IfIndex>
<Description>Ten-GigabitEthernet6/0/51:3 Interface</Description>
</Interface>
<Interface>
<IfIndex>2692</IfIndex>
<Description>Ten-GigabitEthernet6/0/51:4 Interface</Description>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</data>
</rpc-reply>
取Ifmgr模块Interfaces表下ifindex值大于等于5000的Name列信息。
# 进入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.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>
# 如果客户端收到类似如下的报文,则表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="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>
通过NETCONF功能,用户可以将命令行封装在XML报文中对设备进行操作。
当需要给设备发送命令时,请使用格式如下的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>子标签中可以包含多个命令行,一条命令输入完毕,换行,再输入下一条命令即可。
设备收到命令行指令后会回应客户端,当客户端收到如下报文时,表示命令行执行成功(注意命令响应被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>
向设备发送显示当前配置命令。
# 进入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>
# 如果客户端收到类似如下的报文,则表示操作成功。
<?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[
#
version 7.1.052, Demo 2501005,
#
sysname ab
#
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
]]>
</Execution>
</CLI>
</rpc-reply>
使用该功能用户可以获取当前设备的所有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>
设备收到命令行指令后会回应客户端,当客户端收到如下报文时,表示命令行执行成功:
<?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>
获取会话信息。
# 进入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>
# 如果客户端收到类似如下的报文,则表示操作成功。
<?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,此用户不持有锁。
NETCONF支持一个用户关闭除自己外的另一个NETCONF会话,被关闭会话的用户退回到用户视图。
请将以下报文拷贝、粘贴到客户端,用户即能关闭指定的会话:
<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>
设备收到会话关闭请求后会回应客户端,当客户端收到如下报文时,表示指定会话已经被关闭:
<?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>
当前有两个NETCONF登录用户,session ID分别是1和2,session ID为1的用户要关闭另一个用户的会话。
# 进入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>
如果客户端收到如下报文,则表明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>
对于处于XML视图的用户,要退回到用户视图,使用命令行来配置设备时,需要将以下报文拷贝、粘贴到客户端:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<close-session/>
</rpc>
设备收到以上请求后会返回如下报文并退回到用户视图:
<?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>
Comware V7平台对NETCONF标准协议做了一些修订,删除了不常用的操作,增加部分新的操作,如表2-1所示。
表2-1 NETCONF协议支持的操作
操作 |
说明 |
XML格式样例 |
get |
获取数据,包括运行状态数据和配置数据 |
获取Syslog模块的全部数据的XML请求如下: <rpc message-id ="101" 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 ="101" 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 ="101" 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> <IfIndex>262</IfIndex> <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 ="101" 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> <IfIndex>262</IfIndex> <Description>222</Description> <ConfigSpeed>1000000</ConfigSpeed> <ConfigDuplex>1</ConfigDuplex> </Interface> <Interface> <IfIndex>263</IfIndex> <Description>333</Description> <ConfigSpeed>1000000</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 ="101" 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> <IfIndex>262</IfIndex> <Description>222</Description> <ConfigSpeed>1000000</ConfigSpeed> <ConfigDuplex>1</ConfigDuplex> </Interface> </Interfaces> </Ifmgr> </top> </config> </edit-config> </rpc> |
action |
下发非配置数据的设置动作,比如,reset操作 |
清除全部接口的统计信息,XML请求如下: <rpc message-id="101" 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 会话,不保护SNMP等其它请求下发的配置 |
禁止NETCONF会话修改设备的当前配置,XML请求如下: <rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <lock> <target> <running/> </target> </lock> </rpc> |
unlock |
取消锁保护 当会话结束时锁也会被自动释放 |
取消锁保护,允许NETCONF会话修改设备的当前配置: <rpc message-id="101" 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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <get-sessions/> </rpc> |
close-session |
关闭当前NETCONF会话,并释放锁和这个session用到的内部资源(如内存等),退出XML视图 |
关闭当前NETCONF会话,并释放锁和这个session用到的内部资源(如内存等),退出XML视图 <rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <close-session /> </rpc> |
kill-session |
关闭其他NETCONF会话,不支持关闭用户自己的NETCONF会话 |
关闭session-id为1的NETCONF会话: <rpc message-id="101" 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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <CLI> <Configuration>display this</Configuration> </CLI> </rpc> |
save |
保存系统运行配置。save操作可以使用子元素<file>来指定保存的配置文件名称。当save操作中不存在子元素<file>列时,则设备会自动将当前运行配置保存到主用下次启动配置文件中。OverWrite属性用来判断当指定的配置文件名存在时,当前配置是否覆盖原配置文件并保存成功。 |
将设备当前配置保存到文件test.cfg中: <rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <save OverWrite=”false”> <file>test.cfg</file> </save> </rpc>
|
load |
配置加载。<load>操作执行后,指定文件中的配置会被合并到设备的当前配置中 |
将文件a1.cfg中的配置合并到设备的当前配置中: <rpc message-id="101" 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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <rollback> <file>1A.cfg</file> </rollback> </rpc> |
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!