10-NETCONF配置
本章节下载: 10-NETCONF配置 (363.87 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/HTTP/HTTPS/TLS FIPS模式下: |
非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报文最后需要添加“]]>]]>”,否则设备无法识别。
如下为一个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">
<IF>
<Interfaces>
<Interface/>
</Interfaces>
</IF>
</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>
· 用户可以通过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配置任务简介
使能NETCONF over SSH功能 |
可选 |
|
配置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功能处于关闭状态 |
NETCONF支持标准协议规范中描述的NETCONF over SSH功能,使能该功能后,用户可以通过使用支持NETCONF over SSH登录方式的客户端配置工具给设备下发NETCONF指令来实现对设备的访问。
进入系统视图 |
system-view |
- |
指定NETCONF over SSH的监听端口 |
netconf ssh server port port-number |
缺省情况下,NETCONF over SSH使用端口830 |
缺省情况下,NETCONF over SSH功能处于关闭状态 |
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日志功能 |
· 客户端必须给设备发送hello信息,完成能力集的交互后,设备才会处理客户端发送的其它请求。
· 设备同时最多能建立32个NETCONF连接,即最多支持32个用户同时使用NETCONF功能管理和监控设备。用户数超过上限后,新登录的用户将登录失败。
· 多个用户同时进行NETCONF配置时,可能会导致用户请求与配置结果不一致,因此,请避免多个用户同时进行NETCONF配置。
仅Release 1138P01及以上版本支持该特性。
设备支持配置NETCONF空闲超时时间,用户通过Telnet、SSH、Console、或配置工具与设备建立NETCONF连接后,如果在超时时间内,用户与设备无任何报文交互,达到超时时间后,设备将断开与用户配置端的连接。
表1-6 配置NETCONF空闲超时时间
操作 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
配置NETCONF空闲超时时间 |
netconf { soap | agent } idle-timeout minute |
缺省情况如下: · 基于HTTP/HTTPS的NETCONF over SOAP的空闲超时时间为10分钟。 · 基于SSH/Telent/NETCONF over SSH的空闲超时时间为0,即不超时 |
进入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, 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,则获取出从指定索引开始的所有数据。
设备收到配置获取请求报文后会将相应参数的值通过如下报文反馈给客户端:
<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>
<Index>1313</Index>
<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。如果不指定文件名,则缺省保存到主用下次启动配置文件中。
设备收到配置保存请求后会回应客户端,当客户端收到如下报文时,表示保存成功:
<?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会话同时配置设备,建议配置回滚前先用<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) 客户端发送报文
请将以下报文拷贝、粘贴到客户端:
<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>
(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>
下发<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>
下发<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>
下发<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>
下发<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>
<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>
# 进入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语言中增加过滤条件,可以使用户只看到自己关心的数据。数据过滤包括基于表的过滤和基于列的过滤:
· 基于表的过滤用于过滤表的信息。
· 基于列的过滤用于过滤单个列的信息。
基于表的过滤中,过滤条件类似命令行,命令空间为http://www.h3c.com/netconf/base:1.0,属性名为filter。关于支持该过滤方式表的详细信息,具体请参见模块的XML API手册。
如下要求返回IPv4路由表中匹配VRF名称为vrf1,1.1.1.0和24位掩码最长的数据:
<get>
<filter type="subtree">
<top xmlns="http://www.h3c.com/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>
基于列的过滤包括严格匹配、正则表达式匹配过滤和条件匹配过滤。同时指定多种过滤条件时,只有一个生效,其优先级从高到底依次为:严格匹配过滤、正则表达式匹配过滤和条件匹配过滤。
用户在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列包含Ten-Gigabit的所有数据。
# 进入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的所有数据。
<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 h3c:regExp="(Ten-Gigabit)+"/>
</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 h3c:match="notLess: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视图。
# 进行能力交换。
<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 Sysname
#
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协议支持的操作
XML格式样例 |
||
获取Syslog模块的全部数据的XML请求如下: |
||
获取配置数据,和get不同,它只返回非缺省的配置数据。如果没有配置数据,则返回一个空的<data> |
获取接口表内所有配置的XML请求如下: |
|
从指定索引的下一条开始批量获取后续N条数据(索引行数据不返回),包括运行状态数据和配置数据。用户通过index属性指定索引,通过count属性指定N。如未指定索引,则以第一条为索引;如未指定N,或者数据表中符合条件的数据记录不足N条,则返回表中所有剩下的数据条目 get操作会返回所有符合条件的数据,这在某些情况下会导致效率问题。get-bulk允许用户从固定数据项开始,向后获取指定条目的数据记录 |
取全部接口的数据的xml请求如下: <rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <top xmlns="http://www.h3c.com/netconf/data:1.0"> <Interfaces xc:count=”5” xmlns:xc=” http://www.h3c.com/netconf/base:1.0”> |
|
从指定索引的下一条批量获取配置数据。和get-config类似,只返回非默认配置;其它约束类似get-bulk |
获取全部接口配置信息的xml请求如下: <rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> |
|
edit-config增量下发 |
增量下发选项incremental放置在列上,对于类似vlan permitlist列表这样集合性质的列,可能支持增量下发,用户请求XML中有增量下发选项时,最终执行结果不影响本列原有的数据。 增量下发只支持edit-config,但不支持edit-config中的replace。 不是所有模块都支持增量下发,请从模块对应的NETCONF XML API查找其是否支持增量下发 |
下发一个接口的VLAN配置,使用增量下发,262接口原有untagvlanlist为12~15,下发后为1~10,12~15。XML请求如下: <rpc message-id ="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" h3c:xmlns=” http://www.h3c.com/netconf/base:1.0”> <edit-config> <target> <running/> </target> <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0"> <top xmlns="http://www.h3c.com/netconf/config:1.0"> <VLAN xc:operation="merge"> <HybridInterfaces> <Interface> <IfIndex>262</IfIndex> <UntaggedVlanList h3c: incremental=”true”>1-10</UntaggedVlanList> </Interface> </HybridInterfaces> </VLAN> </top> </config> </edit-config> </rpc> |
merge操作必须指定具体的操作对象(行): · 如果指定的对象不存在且不允许创建,则返回merge失败 |
将BufferSize设置为120的xml请求如下: |
|
创建指定对象。create操作必须指定配置对象。create操作的XML数据格式和merge类似,只是operation属性需要指定为“create” · 如果当前配置表支持创建对象,且当前对象不存在,则先创建配置对象,再创建指定的配置 · 如果配置对象下对应的配置项已经存在,则返回data-exist错误 |
同上,把merge修改为create即可 |
|
· 如果指定对象不存在,则不进行replace操作,返回invalid-value错误,提示用户配置对象不存在 |
同上,把merge修改为replace即可 |
|
· 当指定的删除对象中只有表索引时,则删除此配置指定对象的所有配置,同时删除指定对象 · 当指定的删除对象中不仅仅有表索引还存在配置项时,则删除此对象下面的指定配置 · 如果系统中指定对象不存在,或者XML消息未指定对象,则直接返回成功 |
同上,把merge修改为remove即可 |
|
· 当指定的删除对象中只有表索引时,则删除此配置指定对象的所有配置,同时删除指定对象 |
同上,把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"> <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"> |
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"> </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"> <Description>222</Description> <ConfigSpeed>100</ConfigSpeed> <ConfigDuplex>1</ConfigDuplex> <Description>333</Description> <ConfigSpeed>100</ConfigSpeed> |
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"> <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"> <Description>222</Description> <ConfigSpeed>100</ConfigSpeed> |
清除全部接口的统计信息,XML请求如下: <rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> |
||
锁保护的是配置数据,即edit-config中可以指定的那些模块的配置数据,其它操作不受锁的限制 NETCONF锁仅仅保护NETCONF 会话,不保护SNMP等其它请求下发的配置 |
禁止NETCONF会话修改设备的当前配置,XML请求如下: |
|
取消锁保护,允许NETCONF会话修改设备的当前配置: |
||
获取当前系统中所有NETCONF会话的信息(不能指定sessions-ID) |
获取当前系统中所有NETCONF会话的信息: |
|
关闭当前NETCONF会话,并释放锁和这个session用到的内部资源(如内存等),退出XML视图 |
关闭当前NETCONF会话,并释放锁和这个session用到的内部资源(如内存等),退出XML视图 <rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> |
|
关闭其他NETCONF会话,不支持关闭用户自己的NETCONF会话 |
关闭session-id为1的NETCONF会话: |
|
执行命令行的命令。请求消息将命令行语句封装在<CLI>标签中,命令行输出信息被封装在<CLI>标签中返回 CLI支持Configuration和Exec两种方式: · Execution:在用户视图下执行 · Configuration:在系统视图下执行 对于其它视图下命令,则需要在Configuration下先指定进子视图的命令,在指定配置命令 |
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> |
|
保存系统运行配置。save操作可以使用子元素<file>来指定保存的配置文件名称。当save操作中不存在子元素<file>列时,则设备会将当前运行配置保存到主用下次启动配置文件中 |
||
配置加载。<load>操作执行后,指定文件中的配置会被合并到设备的当前配置中 |
将文件a1.cfg中的配置合并到设备的当前配置中: |
|
配置回滚。<rollback>操作必须使用子元素<file>来指定需要回滚的配置文件名称。<rollback>操作执行后,当前系统运行配置会被完全替换为指定文件中所描述的配置 |
将设备当前配置回退到文件1A.cfg中配置的状态: |
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!