10-NETCONF配置
本章节下载: 10-NETCONF配置 (676.77 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 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的方式完成。
如下为一个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="//m.natachou.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(Document 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="//m.natachou.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="//m.natachou.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的交互过程对用户透明。
· 用配置工具与设备建立NETCONF over SOAP或NETCONF over SSH会话,给设备下发NETCONF指令来实现对设备的配置和管理。对于NETCONF over SOAP会话方式,需要将NETCONF指令用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日志功能 |
可选 |
|
|
配置NETCONF使用专用命名空间 |
可选 |
|
|
建立NETCONF会话 |
必选 |
|
|
向设备进行事件订阅 |
可选 |
|
|
给当前配置加锁/解锁 |
可选 |
|
|
<get>/<get-bulk>获取信息 |
可选 |
|
|
<get-config>/<get-bulk-config>获取配置信息 |
可选 |
|
|
<edit-config>编辑指定模块数据 |
可选 |
|
|
配置保存、回滚、加载 |
可选 |
|
|
数据过滤功能 |
可选 |
|
|
命令行操作 |
可选 |
|
|
获取NETCONF状态信息 |
可选 |
|
|
获取YANG文件的内容 |
可选 |
|
|
获取会话信息 |
可选 |
|
|
关闭另一个会话 |
可选 |
|
|
退出XML视图 |
可选 |
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功能处于关闭状态 FIPS模式下,不支持本命令 |
|
开启基于HTTPS的NETCONF over SOAP功能 |
netconf soap https enable |
缺省情况下,基于HTTPS的NETCONF over 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 |
|
配置基于HTTP的NETCONF over SOAP功能关联的ACL |
netconf soap http acl { acl-number | name acl-name } |
缺省情况下,未配置基于HTTP的NETCONF over SOAP功能关联的ACL FIPS模式下,不支持本命令 |
|
配置基于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” |
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 |
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 } * } | row-operation | verbose } |
缺省情况下,NETCONF action和set类操作日志按行操作输出,其他NETCONF日志不输出 |
NETCONF支持共用命名空间和专用命名空间:
· 共用命名空间:各模块共用一个命名空间。使用共用命名空间的报文中,命名空间位于<top>元素中,模块位于<top>元素下,报文示例如下:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-bulk>
<filter type="subtree">
<top xmlns="//m.natachou.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get-bulk>
</rpc>
· 专用命名空间:每个模块单独使用一个命名空间。使用专用命名空间的报文中无<top>元素,命名空间位于模块名后,报文示例如下:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-bulk>
<filter type="subtree">
<Ifmgr xmlns="//m.natachou.com/netconf/data:1.0-Ifmgr">
<Interfaces>
</Interfaces>
</Ifmgr>
</filter>
</get-bulk>
</rpc>
两种类型的命名空间互不兼容。客户端与设备必须使用相同的命名空间才能建立会话。缺省情况下,NETCONF使用共用命名空间。如果客户端不支持共用命名空间,则需要配置本命令,让设备和客户端建立会话时使用专用命名空间。
配置该命令后,用户需要重新建立NETCONF会话,以使客户端和设备使用相同的命名空间。
表1-6 配置NETCONF使用专用命名空间
|
操作 |
命令 |
说明 |
|
进入系统视图 |
system-view |
- |
|
配置NETCONF使用专用命名空间 |
netconf capability specific-namespace |
缺省情况下,NETCONF使用共用命名空间 |
· 客户端必须给设备发送hello信息,完成能力集的交互后,设备才会处理客户端发送的其他请求。
· 设备同一时间内允许建立的最大连接数可以通过aaa session-limit命令配置,关于该命令的详细描述,请参见“安全配置指导”中的“AAA”。用户数超过上限后,新登录的用户将登录失败。
· 多个用户同时进行NETCONF配置时,可能会导致用户请求与配置结果不一致,因此,请避免多个用户同时进行NETCONF配置。
设备支持配置NETCONF空闲超时时间,用户通过Telnet、SSH、Console、或配置工具与设备建立NETCONF连接后,如果在超时时间内,用户与设备无任何报文交互,达到超时时间后,设备将断开与用户配置端的连接。
表1-7 配置NETCONF空闲超时时间
|
操作 |
命令 |
说明 |
|
进入系统视图 |
system-view |
- |
|
配置NETCONF空闲超时时间 |
netconf { soap | agent } idle-timeout minute |
缺省情况如下: · 基于HTTP/HTTPS的NETCONF over SOAP的空闲超时时间为10分钟。 · 基于SSH/Telent/NETCONF over SSH的空闲超时时间为0,即不超时 |
· 进入XML视图后,用户需要严格按照NETCONF报文格式将报文拷贝、粘贴到XML视图中。在NETCONF配置过程中,请勿进行其他任何操作(例如手工输入NETCONF报文),否则可能导致NETCONF配置失败。
· 在XML视图下进行NETCONF配置时,NETCONF报文最后需要添加“]]>]]>”,否则设备无法识别。本手册举例中,为方便识别XML格式,均未添加此结束符,实际操作中请自行添加。
表1-8 进入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>...</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以及发生时间和描述信息。此处可订阅的事件,即系统支持的日志信息。具体可以订阅哪些模块的事件,请参见《日志信息参考手册》。
对于NETCONF over SOAP会话,设备不支持订阅事件。
订阅只对当前连接生效。如果连接断开,订阅会自动取消。
多次发送订阅报文,可以订阅多个事件。
事件订阅报文格式如下:
<?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="//m.natachou.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>2019-01-04T12:30:46</eventTime>
<event xmlns="//m.natachou.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>2019-01-04T12:30:52</eventTime>
<event xmlns="//m.natachou.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>
因为设备同时可以建立多个NETCONF连接,即支持多个用户同时使用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 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的用户已经持有锁。
NETCONF支持用户对设备进行业务操作,包括对指定信息的获取和修改。基本标签有<get>、<get-bulk>、<get-config>、<get-bulk-config>和<edit-config>,分别用来获取所有数据、获取配置数据和编辑指定模块的数据。详细规则参见《NETCONF XML API手册》。
用户执行<get>、<get-bulk>、<get-config>或<get-bulk-config>操作获取设备数据时:
· 如果所获取数据中包含NETCONF不能识别的字符,则NETCONF将该字符转换为“?”输出到客户端。
· 如果操作中的模块进程未启动,则该操作可能会将空数据通过如下报文反馈给客户端:
<?xml version="1.0"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data/>
</rpc-reply>
<get><netconf-state/></get>操作不支持数据过滤
<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="//m.natachou.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="//m.natachou.com/netconf/base:1.0">
<get-bulk>
<filter type="subtree">
<top xmlns="//m.natachou.com/netconf/data:1.0" xmlns:base="//m.natachou.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="//m.natachou.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 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="//m.natachou.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="//m.natachou.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="//m.natachou.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="//m.natachou.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="//m.natachou.com/netconf/data:1.0" xmlns:web="//m.natachou.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="//m.natachou.com/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>GigabitEthernet1/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="//m.natachou.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>
使用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>
设备支持对当前正在运行的配置进行回滚,配置回滚点后,设备可以在如下场景下进行配置回滚:
· NETCONF客户端主动下发配置回滚指令。
· NETCONF客户端在指定的时间内无任何指令,即NETCONF会话空闲时间超过配置的回滚空闲超时时间。
· NETCONF客户端和设备间的连接异常断开。
配置回滚步骤如下:
如果存在多个NETCONF会话同时配置设备,建议配置回