13-NETCONF配置
本章节下载: 13-NETCONF配置 (323.99 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分层 |
|
内容层表示的是被管理对象的集合,可以是配置数据、状态数据、统计信息等。NETCONF协议具体可读写的数据请参见《NETCONF XML API 手册》 |
||
操作层定义了一系列在RPC中应用的基本的原语操作集,这些操作将组成NETCONF的基本能力。NETCONF全面地定义了对被管理设备的九种基础操作 |
||
RPC层为RPC模块的编码提供了一个简单的、传输协议无关的机制。通过使用<rpc>和<rpc-reply>元素分别对NETCONF请求和响应数据(即操作层和内容层的内容)进行封装 |
||
非FIPS模式下:Console/Telnet/SSH/TLS FIPS模式下: |
非FIPS模式下:通信协议层为NETCONF提供面向连接的、可靠的、顺序的数据链路。NETCONF支持Telnet、SSH、Console等CLI登录方式/协议,即NETCONF Over SSH/Telnet/Console FIPS模式下: 通信协议层为NETCONF提供面向连接的、可靠的、顺序的数据链路。NETCONF支持SSH、Console等CLI登录方式/协议,即NETCONF Over SSH/Console |
NETCONF命令必须符合XML语言的基本格式。
· NETCONF和NETCONF over SOAP报文格式请遵循RFC 4741。
· NETCONF操作以及可操作的数据项,请参见《NETCONF XML API 手册》。NETCONF报文的数据合法性都将经过校验才会下发,如果校验失败则会向客户端报错。其中,数据合法性校验通过XML Schema的方式完成。
在XML视图下进行NETCONF配置时,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>
· 用户可以通过Telnet、SSH、Console登录到设备的CLI界面,通过命令行界面编辑下发NETCONF指令。该方式一般用于研发和测试环境。在XML视图下,将合法的NETCONF报文直接拷贝、粘贴到命令行提示符处,即可验证设备的NETCONF功能是否运行正常。
· 用户使用自己开发的配置工具给设备下发NETCONF指令来实现对设备的访问。因为用户开发的配置工具的URL和设备出厂支持的URL不一致,用户需要将下发NETCONF指令用SOAP封装成一种通用的格式,以便设备能够正常转换。因此,使用该方式前必须使能NETCONF over SOAP功能。
与NETCONF协议相关的协议规范有:
· 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 5277:NETCONF Event Notifications
· RFC 5539:NETCONF over Transport Layer Security (TLS)
· RFC 6241:Network Configuration Protocol
表1-2 NETCONF配置任务简介
给当前配置加锁/解锁 |
||
<get>/<get-bulk>获取信息 |
||
<edit-config>编辑指定模块数据 |
||
退出XML视图 |
NETCONF支持封装成SOAP报文后通过HTTP、HTTPS协议传输,即NETCONF over SOAP over HTTP/HTTPS,使用该功能后,用户可以通过开发配置工具给设备下发NETCONF指令来实现对设备的访问。
使能HTTP的SOAP功能 |
FIPS模式下,不支持本命令 缺省情况下,基于HTTP的SOAP功能处于关闭状态 |
|
使能HTTPS的SOAP功能 |
缺省情况下,基于HTTPS的SOAP功能处于关闭状态 |
仅Release 2311及以上版本支持该功能。
NETCONF支持标准协议规范中描述的NETCONF over SSH功能,使能该功能后,用户可以通过使用支持NETCONF over SSH登录方式的客户端配置工具给设备下发NETCONF指令来实现对设备的访问。
缺省情况下,NETCONF over SSH功能处于关闭状态 |
||
指定NETCONF over SSH的监听端口 |
缺省情况下,NETCONF over SSH使用端口830 |
· 客户端必须给设备发送hello信息,完成能力集的交互后,设备才会处理客户端发送的其它请求。
· 设备同时最多能建立32个NETCONF连接,即最多支持32个用户同时使用NETCONF功能管理和监控设备。用户数超过上限后,新登录的用户将登录失败。
进入XML视图 |
|
进入XML视图后,客户端和设备必须交换各自支持的能力集,双方收到对方的能力集后才可以进行下一步操作。
客户端进入XML视图后,设备会发送如下报文自动告知客户端支持的NETCONF能力集:
· <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>
客户端订阅没有时间限制的全部事件。订阅后在断开连接之前,设备发生的所有事件都会发送给客户端。
# 进入XML视图。
# 进行能力交换。
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 订阅全部事件,不限制订阅时间。
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>
因为设备同时可以建立多个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视图。
# 进行能力交换。
<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>操作用来从指定索引的下一条开始批量获取后续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,则获取出从指定索引开始的所有数据。
设备收到配置获取请求报文后会将相应参数的值通过如下报文反馈给客户端:
<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等。<get-config>和<get-bulk-config>操作报文中可以包含子标签<filter>,用来对要获取的信息进行过滤。
<get-config>和<get-bulk-config>的通用报文格式如下:
<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>
设备收到配置获取请求报文后会将相应配置通过如下报文反馈给客户端:
<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操作类型”。
<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请求后会回应客户端,当客户端收到如下报文时,表示设置成功:
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
· 另外,用户还可以通过<get>操作可以查看参数的当前值是否和edit-config操作设置的值一致。
# 进入XML视图。
# 进行能力交换。
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 获取所有模块所有配置数据。
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
</get-config>
</rpc>
# 如果客户端收到类似如下的报文,则表示操作成功:
<data>
<top xmlns="http://www.h3c.com/netconf/config:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<IfIndex>1307</IfIndex>
<Shutdown>1</Shutdown>
</Interface>
<Interface>
<IfIndex>1308</IfIndex>
<Shutdown>1</Shutdown>
</Interface>
<Interface>
<IfIndex>1309</IfIndex>
<Shutdown>1</Shutdown>
</Interface>
<Interface>
<IfIndex>1311</IfIndex>
<VlanType>2</VlanType>
</Interface>
<Interface>
<IfIndex>1313</IfIndex>
<VlanType>2</VlanType>
</Interface>
</Interfaces>
</Ifmgr>
<Syslog>
<LogBuffer>
<BufferSize>120</BufferSize>
</LogBuffer>
</Syslog>
<System>
<Device>
<SysName>H3C</SysName>
<TimeZone>
<Zone>+11:44</Zone>
<ZoneName>beijing</ZoneName>
</TimeZone>
</Device>
</System>
</top>
</data>
</rpc-reply>
获取Syslog模块的所有配置数据
# 进入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模块的所有配置数据。
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视图。
# 进行能力交换。
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.0</capability>
</capabilities>
</hello>
# 取接口表的一条数据。
<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>
# 如果客户端收到类似如下的报文,则表示操作成功:
<data>
<top xmlns="http://www.h3c.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<IfIndex>3</IfIndex>
<Name>Ten-GigabitEthernet1/0/2</Name>
<AbbreviatedName>XGE1/0/2</AbbreviatedName>
<PortIndex>3</PortIndex>
<ifTypeExt>22</ifTypeExt>
<ifType>6</ifType>
<Description> Ten-GigabitEthernet 1/0/2 Interface</Description>
<AdminStatus>2</AdminStatus>
<OperStatus>2</OperStatus>
<ConfigSpeed>0</ConfigSpeed>
<ActualSpeed>100000</ActualSpeed>
<ConfigDuplex>3</ConfigDuplex>
<ActualDuplex>1</ActualDuplex>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</data>
</rpc-reply>
修改syslog模块中的日志缓冲区可存储的信息条数为512。
# 进入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。
<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>
使用NETCONF功能,用户可以对设备配置进行保存、回滚和加载操作。
请将以下报文拷贝、粘贴到客户端,用户即可将设备的当前配置保存到指定名称的文件中,同时该文件将自动作为下次启动配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save>
<file>指定文件的名称</file>
</save>
</rpc>
其中,“指定文件的名称”必须以存储介质的名称开头,后缀为.cfg。配置文件保存路径和文件名称的总长度不能超过191个字符。当报文中存在<file>列时,必须输入指定文件的名称,不能为空;如果不存在该列,则设备会自动将当前配置保存到缺省主用下次启动配置文件中。
设备收到配置保存请求后会回应客户端,当客户端收到如下报文时,表示保存成功:
<?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>
其中,“指定文件的名称”必须以存储介质的名称开头,后缀为.cfg,配置文件保存路径和文件名称的总长度不能超过191个字符。
设备收到配置回滚请求后会回应客户端,当客户端收到如下报文时,表示配置回滚成功:
<?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。配置文件保存路径和文件名称的总长度不能超过191个字符。
设备收到配置加载请求后会回应客户端,当客户端收到如下报文时,表示配置加载成功:
<?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视图。
# 进行能力交换。
<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>
当过滤条件比较复杂时,可以在指定元素上设置regExp属性为一个正则表达式,以完成过滤的目的。
如下为一个NETCONF报文示例,用于获取接口的描述信息,并要求这些描述信息全部为大写字母,不能有其它字符。
<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属性完成,属性的值(即过滤条件)可以为数字、字符串。
值大于value,支持的数据类型为:日期、数字、字符串 |
||
值小于value,支持的数据类型为:日期、数字、字符串 |
||
值不小于value,支持的数据类型为:日期、数字、字符串 |
||
值不大于value,支持的数据类型为:日期、数字、字符串 |
||
值等于value,支持的数据类型为:日期、数字、字符串、OID、BOOL |
||
值不等于value,支持的数据类型为:日期、数字、字符串、OID、BOOL |
||
包含字符串string,支持的数据类型为:字符串 |
||
不能包含字符串string,支持的数据类型为:字符串 |
||
以字符串string开头,支持的数据类型为:字符串、OID |
||
以字符串string结束,支持的数据类型为:字符串 |
如下为一个NETCONF报文示例,用于获取实体扩展信息中CPU利用率大于50%的实体。
<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视图。
# 进行能力交换。
<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列包含冒号的所有数据。
<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-GigabitEthernet1/0/1 Interface</Description>
</Interface>
<Interface>
<IfIndex>2682</IfIndex>
<Description>Ten-GigabitEthernet1/0/2 Interface</Description>
</Interface>
<Interface>
<IfIndex>2683</IfIndex>
<Description>Ten-GigabitEthernet1/0/3 Interface</Description>
</Interface>
<Interface>
<IfIndex>2684</IfIndex>
<Description>Ten-GigabitEthernet1/0/4 Interface</Description>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</data>
</rpc-reply>
取Ifmgr模块Interfaces表下ifindex值大于等于5000的Name列信息。
# 进入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列信息。
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>NULL1</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视图。
# 进行能力交换。
<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[
<Sysname>display current-configuration
#
version 7.1.045, ESS 2305
#
sysname ASBR2
#
telnet server enable
#
irf mac-address persistent timer
irf auto-update enable
undo irf link-delay
irf member 1 priority 1
]]>
</Execution>
</CLI>
</rpc-reply>
使用该功能用户可以获取当前设备的所有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视图。
# 进行能力交换。
<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视图。
# 进行能力交换。
<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协议支持的操作
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!