('RFC6241网络配置协议RFC6241NETCONF协议[在此处键入]RFC6241网络配置协议修订记录修订日期修改人版本号修改内容2020-03-12程怀玺-Jadev1.0完成翻译初稿概述:NETCONF(TheNetworkConfigurationProtocol)定义了安装、操作、删除网络设备配置的机制。它使用基于XML作为配置数据和协议消息的编码方式。NETCONF协议使用远程过程调用(RPC)实现协议定义的操作。本文档废弃了RFC4741。[在此处键入]RFC6241网络配置协议目录1引言........................................................................................................................................................................71.1术语...................................................................................................................................................81.2协议概览............................................................................................................................................91.3Capabilities能力................................................................................................................................91.4状态和配置分离..............................................................................................................................102传输协议需求.................................................................................................................................................102.1面向连接的操作..............................................................................................................................112.2认证、完整性以及机密性..............................................................................................................112.3必须的传输层协议..........................................................................................................................123XML注意事项................................................................................................................................................123.1名称空间..........................................................................................................................................123.2文档类型声明..................................................................................................................................124RPC模型.........................................................................................................................................................124.1元素........................................................................................................................................134.2元素..............................................................................................................................144.3元素...............................................................................................................................144.4元素.........................................................................................................................................164.5流水线..............................................................................................................................................175配置模型.........................................................................................................................................................175.1配置数据存储..................................................................................................................................175.2数据模型..........................................................................................................................................176子树过滤器.....................................................................................................................................................186.1概览.................................................................................................................................................186.2子树过滤器组件..............................................................................................................................186.2.1名称空间选择..........................................................................................................................196.2.2属性匹配表达式......................................................................................................................196.2.3容器节点..................................................................................................................................206.2.4选择节点..................................................................................................................................206.2.5内容匹配节点..........................................................................................................................206.3子树过滤器处理..............................................................................................................................226.4子树过滤器实例..............................................................................................................................22[在此处键入]RFC6241网络配置协议6.4.1无过滤器..................................................................................................................................226.4.2空过滤器..................................................................................................................................226.4.3选择整个子树...............................................................................................................236.4.4选择子树的所有元素....................................................................................256.4.5选择特定的元素...........................................................................................................266.4.6从元素中指定元素.......................................................................................................276.4.7多个过滤树..............................................................................................................................286.4.8带属性的元素..........................................................................................................................297协议操作.........................................................................................................................................................317.1.....................................................................................................................................317.2....................................................................................................................................327.3..................................................................................................................................377.4................................................................................................................................387.5..............................................................................................................................................397.6..........................................................................................................................................417.7................................................................................................................................................427.8................................................................................................................................437.9...................................................................................................................................438能力集(Capabilities)........................................................................................................................................448.1能力集交换......................................................................................................................................458.2Writable-Running能力...........................................................................................................468.2.1描述..........................................................................................................................................468.2.2依赖..........................................................................................................................................468.2.3能力标识符..............................................................................................................................468.2.4新增操作..................................................................................................................................468.2.5对现有操作的修改..................................................................................................................468.3Candidate配置能力...................................................................................................................468.3.1描述..........................................................................................................................................468.3.2依赖..........................................................................................................................................478.3.3能力标识符..............................................................................................................................478.3.4新操作......................................................................................................................................478.3.5对现有操作的修改..................................................................................................................488.4确认提交能力..................................................................................................................................49[在此处键入]RFC6241网络配置协议8.4.1描述..........................................................................................................................................498.4.2依赖..........................................................................................................................................508.4.3能力标识符..............................................................................................................................508.4.4新操作......................................................................................................................................508.4.5对现有操作的修改..................................................................................................................518.5遇错回滚能力..................................................................................................................................538.5.1描述..........................................................................................................................................538.5.2依赖..........................................................................................................................................538.5.3能力标识符..............................................................................................................................538.5.4新操作......................................................................................................................................538.5.5对现有操作的修改..................................................................................................................538.6验证能力..........................................................................................................................................548.6.1描述..........................................................................................................................................548.6.2依赖..........................................................................................................................................548.6.3能力标识符..............................................................................................................................548.6.4新操作......................................................................................................................................558.6.5对现有操作的修改..................................................................................................................558.7startup配置能力........................................................................................................................568.7.1描述..........................................................................................................................................568.7.2依赖..........................................................................................................................................568.7.3能力标识符..............................................................................................................................568.7.4新操作......................................................................................................................................568.7.5对现有操作的修改..................................................................................................................568.8URL能力..........................................................................................................................................578.8.1描述..........................................................................................................................................578.8.2依赖..........................................................................................................................................578.8.3能力标识符..............................................................................................................................578.8.4新操作......................................................................................................................................578.8.5对现有操作的修改..................................................................................................................588.9XPath能力.....................................................................................................................................588.9.1描述..........................................................................................................................................588.9.2依赖..........................................................................................................................................598.9.3能力标识符..............................................................................................................................59[在此处键入]RFC6241网络配置协议8.9.4新操作......................................................................................................................................598.9.5对现有操作的修改..................................................................................................................599安全考虑.........................................................................................................................................................6010IANA考虑...............................................................................................................................................6110.1NETCONFXML名称空间...............................................................................................................6110.2NETCONFXML模式.......................................................................................................................6210.3NETCONFYANG模型....................................................................................................................6210.4NETCONF能力URN.......................................................................................................................6211贡献人.....................................................................................................................................................6312致谢.........................................................................................................................................................6313参考文档.................................................................................................................................................6313.1规范性引用......................................................................................................................................6313.2信息参考..........................................................................................................................................65附录A:NETCONF错误码列表...........................................................................................................................65附录B:NETCONF消息层XML模式.................................................................................................................69附录C:NETCONF操作的YANG模型..............................................................................................................75附录D:能力模板..................................................................................................................................................93D.1.capability-name(模板)...................................................................................................................94D.1.1.overiew.....................................................................................................................................94D.1.2.Dependencies...........................................................................................................................94D.1.3.CapabilityIdentifier.................................................................................................................94D.1.4.NewOperations........................................................................................................................94D.1.5.ModificationstoExistingOperations.......................................................................................94D.1.6.InteractionswithOtherCapabilities.......................................................................................94附录E:使用NETCONF配置多个设备...............................................................................................................94E.1.在单个设备上的操作......................................................................................................................94E.1.1.获取配置锁..............................................................................................................................95E.1.2.打点(备份)正在运行的配置...................................................................................................96E.1.3.加载并验证传入的配置..........................................................................................................96E.1.4.改变运行配置..........................................................................................................................97E.1.5.测试新配置..............................................................................................................................97E.1.6.使配置永久生效......................................................................................................................97E.1.7.释放配置锁..............................................................................................................................98[在此处键入]RFC6241网络配置协议E.2.操作多个设备..................................................................................................................................99附录F:相对RFC4741的变化.............................................................................................................................99[在此处键入]RFC6241网络配置协议1引言NETCONF定义了一种机制,通过这种机制可以管理网络设备,可以检索网络设备的配置数据,可以上传、操作网络设备的配置数据。协议使得设备可以暴露全部的正式的API接口,应用层可以shiyo9ng这个直接的API发送或接收全部或部分配置数据的集合。NETCONF使用RPC机制。Client将RPC以XML编码,并经安全的、面向连接的会话发送给Server。Server返回以XML编码的应答。请求和应答的内容以XMLDTD或XMLSchema规范化(此两种机制用于指导和验证XML文档是否满足要求),以便双方了解在消息交换中的约束。NETCONF的一个主要主要方面是,允许管理协议的功能紧密的映射到网络设备的本机功能,从而降低了开发成本,允许快速接入新特性。另外,应用可以访问设备本机接口的语义和语法。NETCONF可以让Client发现Server侧支持的协议扩展(该协议定义为能力capabilities),Client利用这些能力去优化Server的行为。capability可以以一种非集中方式扩展。标准或非标准的capabilities可以通过严格的语法和语义定义。具体参考第8章。NETCONF协议是自动化配置系统的构建组件(SDN南向接口之一)。XML是一种通用的用于信息交换的语言,为分层的内容提供了完整的特定的编码机制。利用基于XML的信息转换技术,比如XSLT,可以提供自动化生成全部或部分配置的系统。系统可以通过查询一个或多个数据库,获取网络拓扑信息、链路信息、策略信息、客户信息和服务信息,通过一个或多个XSLT脚本将这些面向任务的、设备供应商独立数据转化为特定供应商的、特定产品、特定操作系统、特定软件版本的信息格式,然后通过NETCONF协议配置给网络设备。本文档涉及的关键字"MUST","MUSTNOT","REQUIRED","SHALL","SHALLNOT","SHOULD","SHOULDNOT","RECOMMENDED","MAY",和"OPTIONAL"请参考RFC2119[RFC2119]。1.1术语候选数据存储:candidateconfigurationdatastore:候选配置存储可以被操纵但是不影响当前运行配置,并且它可以提交到运行配置数据存储。并不是所有的设备支持候选配置数据存储;能力:capability:能力是补充基本NETCONF规范的功能;客户端:client:调用Server上的协议操作,另外,Client可以订阅接收来自Server的通知;[在此处键入]RFC6241网络配置协议配置数据:configurationdata:用于将系统从其初始默认状态转换为特定状态的科协数据的集合;数据存储:datastore:用于存储和访问信息的概念性的位置。一个配置存储可以使用,举例来说,可以是文件、数据库、FLASH存储或者上述的组合;配置数据存储:configurationdatastore:保存将设备从初始默认状态装换为特定操作状态的配置数据的完整集合;消息:message:会话内的协议元素,消息是良够的XML文档;通知:notification:一个Server发起的消息,指示Servre识别到一个特定的事件;协议操作:protocoloperation:被NETCONF协议使用的特定的远程过程调用;远程过程调用:RPC:通过执行和消息实现;运行配置存储:runningconfigurationdatastore:保存设备上当前运行的完整的配置数据存储。设备上总是存在运行的配置数据存储;服务端:Server:执行Client发起的协议操作,另外Server可以给Client发送通知;会话:session:Client和Server使用一个安全的、面向连接的会话交换消息;开机配置存储:startupconfigurationdatastore:开机配置存储保存着设备开机时要加载的配置数据,只存在将开机配置数据存储和运行配置存储分离的设备上;状态数据:statedata:系统上非配置数据的其他数据,比如只读的状态信息和统计信息;用户:user:客户端的认证标识符。一个Client的认证标识符通常是NETCONF用户名;1.2协议概览为了方便Client和Server间的通信,NETCONF使用简单的RPC机制。Client可以网络管理器的一个脚本或者一个子应用。Server端典型情况下运行在设备上。术语“设备”和“Server”在本文档上有相同含义,而“Client”和“Application”有相同含义。NETCONF会话是网络管理者或网络配置应用和网络设备之间的一个逻辑连接。设备必须支持一个会话,并且应该支持多个会话。全局配置属性可以在任何授权会话中修改,并且影响所有会话,特定于会话的属性只影自身。NETCON从概念上可以分为四个层次,如下图。[在此处键入]RFC6241网络配置协议图1:NETCONF协议封层(1)安全传输层为Client和Server提供通信连接。NETCONF可以于多种传输层协议之上,只要满足NETCONF的基本要求。第二章描述了这些需求。(2)消息层为编码RPC和通知提供了一个简单的、独立于传输层的成帧机制。第四章描述RPC消息,RFC517定义了通知机制。(3)操作层通过以XML编码的参数的RPC方法定义了协议的基本操作。第四章列举了协议的基本操作。(4)内容层不在本规范范围内。本规范期望一些单独的工作以标准化NETCONF数据模型。RFC6020定义的YANG,用于指定NETCONF的数据模型和协议操作,其涉及了上图中的操作层和内容层。1.3Capabilities能力集能力是在NETCONF基本功能的基础上扩展新功能的方式。NETCONFcapability是一个补充NETCONF基本规范的功能集合(下文称为能力集Capabilities),能力通过统一资源标识符URI[RFC3986]标识。能力描述了操作以及操作的内容,能力是设备基本操作的补充。Client可以发现Server侧的能力,使用该能力定义的附加操作、参数、以及内容。能力(capability)也许定义了一个或多个有依赖关系的能力集(capabilities)。支持其中一个能力,Server必须支持其依赖的任何一个能力。第8章定义了能力交换消息,通过该消息Client可以发现Server允许其使用的能力集。第8章同时列举了本文档中定义的多个能力集。其他规范可以定义另外的能力集,从而使能力集可以随时间扩展。标准制定机构可以定义标准能力集,同时实现可以定义专属能力集。能力URI必须到权威命名机构注册以避免能力集名称的冲突。[在此处键入]RFC6241网络配置协议1.4状态和配置分离从一个运行系统上检索的数据可以逻辑上分为两类,其一是配置数据(configuration),另一类是状态数据(state)。配置数据的定义是,它是一个让系统从当前状态转换到目标状态的可写数据的集合。状态数的定义是,它是除配置数据外的其他数据,比如只读的状态信息和统计指标。当对设备执行配置操作时,如果包括状态数据将会引起一系列的问题:1)配置数据集的比较将受到不相关条目的影响,比如不同的统计信息;2)数据数据可能包含无意义的请求,比如尝试些只读数据;3)数据集将非常大;4)打包数据将胡包含只读数据项的值,使得数据恢复变得复杂。考虑到这些问题,NETCONF协议意识到配置数据和状态数据的不同,因此对它们需要定义不同的操作。操作只用于检索配置数据,而操作检索配置数据和状态数据。需要注意的是,NETCONF聚焦于能够让设备进入其期望的运行状态的信息,而包含其他重要的持久性数据是特定于实现的。比如,用户文件和数据库在NETCONF协议看来不是配置数据。比如,如果一个包含本地授权数据的数据库存储于设备上,配置数据是否包含它,是特定于实现的。2传输协议需求NETCONF使用RPC通讯机制。Client发送一系列的一个或多个RPC请求,Server返回对应的一系列的RPC应答。NETCONF可以运行在满足相应功能集的任何传输层之上,不和任何特定传输协议绑定,只要该传输协议允许映射定义如何通过该特定协议实现它。传输层协议必须给NETCONF协议提供指示会话类型是Client还是Server的机制,本小节描述NETCONF协议对传输层协议要求的细节信息。2.1面向连接的操作NETCONF是面向连接的协议,要求通信双方维护一个持久的连接。这个连接必须提供可靠的,有序的传输服务。NETCONF连接在协议操作时是长久的、持续的,即协议的多个操作要能够在同一个连接上完成。另外,在Server侧为一个连接分配的资源需要在连接释放时能够自动释放,以便更容易从失败中恢复,[在此处键入]RFC6241网络配置协议有更高的鲁棒性。比如,当Client获取一个锁时,这个锁一直持续到显示释放或者Server确定连接已经终止时。如果一个连接终止时,对于Client已经申请的锁,Server端必须执行任何特定的恢复措施。锁机制将在7.5章节进一步描述。2.2认证、完整性以及机密性NETCONF连接提供身份认证、数据完整性保护、机密性以及防重放保护,NETCONF依赖底层传输协议提供这种能力。NETCONF通信双方假定被提供了独立于本文档的合适的安全等级和机密性。比如,依赖于底层的实现,连接通过TLS[RFC5246]或者SSH[RFC4261]进行加密。NETCONF连接必须被认证,传输层协议有责任将Client向Server进行认证或者Server向Client进行认证。NETCONF通信双方假定认证信息已经被底层协议使用足够值得信任的机制进行验证,并且双方的ID已经被充分证明。NETCONF的目标之一是,针对设备提供一个非常贴近设备自身接口的功能的编程接口。因此,鼓励底层协议复用设备已有的认证机制。比如,NETCONFserver端或者设备支持RADIUS[RFC2865],则允许使用RADIUS实现NETCONF会话的认证。认证处理必须输出一个结果,Server能够知道被认证的客户端身份ID拥有哪些权限。Client的身份ID通常被称为NETCONF用户名。用户名是与[W3C.REC-xml-20001006]的2.2节中的“Char”生成机制相匹配一个字符串。派生出用户名的算法是传输层协议决定的,同时与传输层采用的认证机制相关。传输层协议必须给NETCONF其他层提供一个用户名。给定Client的访问权限,由NETCONF用户名决定,这是NETCONFServer端的配置的一部分。这些权限必须在NETCONF会话的其余部分中被强制执行,如何控制访问控制的具体细节不在本文档的讨论范围内。2.3必选的传输层协议NETCONF实现必须支持SSH传输协议[RFC6242]。3XML注意事项XML服务于NETCONF的编码方式,使得可以用文本形式表达复杂的层次化数据,这些数据可以使用传统的文本工具或XML特定工具读取、保存以及操作(manipulate,加工&处理)。[在此处键入]RFC6241网络配置协议所有的NETCONF消息必须是格式正确的XML,以UTF-8编码[RFC3629]。如果一方收到了一个格式非法的或者不是UTF-8编码的rpc消息,它应该以“malformed-message”错误作为应答。如果因为任何原因不能返回应答,Server必须终止会话。NETCONF消息也许以[W3C.REC-xml-20001006]中2.8章节定义的XML声明开头。本节讨论了与NETCONF有关的少量与XML有关的注意事项。3.1名称空间所有的NETCONF协议元素都被定义在名称空间:urn:ietf:params:xml:ns:netconf:base:1.0NETCONF能力名称必须是URI格式[RFC3986],NETCONF能力集在第8章讨论。3.2文档类型声明[W3C.REC-xml-20001006]中2.8节描述的文档类型声明(DTD)不得出现在NETCONF的内容中。4RPC模型NETCONF协议使用基于RPC的通信模型。NETCONF双方使用和元素为NETCONF的Requests和Responses提供与传输协议无关的成帧机制。就是说通过xml中的和元素分别封装协议定义的Request和Response消息。RPC消息的语法和XML编码在附录B中定义。4.1元素元素用于封装从Client发往Server的NETONF请求消息。元素存在一个必选属性“message-id”,它是一个RPC发送方选择的通常为一个单调递增整数的字符串。RPC接收方不必解码或解析该字符串,只是保存并在对应的消息中的“message-id”中返回。如果发送方希望对端未经修改地返回字符串,则必须确保“message-id”被[W3C.REC-xml-20001006]中定义的XML属性值规范化规则进行了规范化。例如:[在此处键入]RFC6241网络配置协议 如果元素中存在其他的属性,NETCONF对端必须在属性中不加修改的返回,包括“xmlns”属性。RPC的(方法)名字和参数都被编码在元素的内容中,其中(方法)名字是元素的直接子元素,并且方法的参数被编码在该子元素的中。如下的例子以方法名举例,它有两个参数:取值“14”和取值“fred”。14 fred 如下的例子以方法名举例,该方法携带一个参数名为取值为“27606-0100”参数。27606-0100 如下的例子以NETCONF的标准方法为例,该方法没有参数。 4.2元素消息是消息的应答。元素有一个强制属性“message-id”,它的取值与对应的消息中的“message-id”的取值保持一致。NETCONF服务端必须不加修改的在中返回的任何其他属性。应答数据被编码在元素的一个或多个子元素中。举例来说:下边的元素调用NETCONF的方法,该方法包括一个附加的命名为“user-id”的属性。需[在此处键入]RFC6241网络配置协议要注意的是该属性不在NETCONF的消息中。而元素不加修改的返回了该“user-id”属性。 4.3元素当处理请求发生错误时,在应答消息中需要包含元素。如果一个Server在处理请求时遇到了多个错误,则中可以包含多个元素。然而,不强制要求Server必须支持检查并返回多个。不要求Server在特定的序列中检查出特定的错误条件。只要求Server在遇到任何错误时,必须返回一个元素。Server在Client由于没有足够的访问权限失败时,不得在中返回应用级或数据模型特定的错误信息。元素包括如下信息:error-type:定义了错误发生所在的NETCONF的层级:transport(SercureTransport)、rpc(Messages)、protocol(Operation)、application(Content);error-tag:包含错误条件的字符串,参见附录A;error-severity:包含一个设备确定的错误严重级别的字符串:“error”、“warning”。需要注意的是当前规范并没有使用warnging等级的error-tag,此字段被保留将来使用。error-app-tag:包含一个标识特定于数据模型或特定实现的错误条件。如果没有适当的应用error-tag可以与特定错误条件相关联,则此元素将不存在。如果同时存在特定于数据模型和特定于实现的error-app-tag,则Servre端必须使用特定于数据模型的值。error-path:包含一个[W3C.REC-xpath-19991116]定义的绝对XPath表达式,指示了中正在报告的错误发生的节点的元素路径。如果没有合适的载荷元素或数据存储节点可以关联到一个特定的错误条件,将不会包含该元素。XPath表达式在以下上下文中解释:名称空间的集合在元素的范围内;[在此处键入]RFC6241网络配置协议可变绑定的集合是空的;函数库是核心函数库;上下文节点依赖于正在报告错误的节点:如果载荷元素可以和错误关联,则上下文节点是rpc请求的文档节点(比如,元素);否则,上下文节点是所有数据模型的根节点(比如,最近的一个将所有节点作为子节点的节点)。error-message:包含了一个人类可读的描述问题原因的字符串。如果一个特定的错误条件没有合适的消息表达,则不包含该元素。该元素必须包含[W3C.REC-xml-20001006]定义的“xml:lang”属性。error-info:包含了一个协议或数据模型相关的错误内容。对于特定错误条件没有错误内容提供,则不需包含该元素。附录A中的列表为每种错误都定义了一个强制性的error-info取值。在任何协议要求的内容之后,数据模型定义可以要求将某些应用程序层错误信息包括在错误信息容器中。允许实现包含附加的元素去提供更多与实现相关的调试信息。附录A列举了NETCONF定义的标准错误列表。例子:当中没有包含“message-id”属性时,返回一个错误。注意,只有在这种情况下,中不出现“message-id”属性。 rpc missing-attribute error message-id rpc 如下的解释了返回多个的例子。注意,这个例子中使用元素区分元素的不同实例。application invalid-value error /t:top/t:interface[t:name="Ethernet0/0"]/t:mtuMTUvalue25000isnotwithinrange256..9192 application invalid-value error /t:top/t:interface[t:name="Ethernet1/0"]/t:address/t:nameInvalidIPaddressforinterfaceEthernet1/0 4.4元素当处理请求没有错误或警告发生时,在消息中包含元素,并且没有其他数据返回。比如: 4.5流水线NETCONF的rpc请求被被管设备串行处理,其他的请求可以在之前的请求完成之前发送。被管理设备必须仅按照接收请求的顺序发送响应。[在此处键入]RFC6241网络配置协议5配置模型NETCONF提供了一个初始的操作集合和一系列用户扩展基本操作的能力集。NETCONF通信双方在会话发起阶段交换设备能力集在8.1章节描述。5.1配置数据存储NETCONF定义了几个配置数据存储(设备配置数据用于不同目的的副本),和其上的配置操作。配置数据存储(datastore)是一个让设备从其初始默认状态转换为期望的工作状态的配置全集。配置数据存储并不包含状态数据或者可执行命令。运行配置数据存储包含了当前网络上正在使用的配置全集,设备上只且仅有一份运行配置。NETCONF协议操作使用元素表示运行配置。在基本模型中只有配置数据存储,而其他的配置数据存储可以工作能力集定义,当设备通知其有对应能力时才表明其存在对应的配置数据存储。8.3和8.7章节的能力集定义了候选和开机两份配置数据存储。5.2数据模型数据模型和对应内容的发行不在NETCONF协议范围内,但是NETCONF协议假定:设备的数据模型对应用和NETCONF通信双方是众所周知的,并且通过数据模型,可以获知注入布局、容器(containment)、键、查找、替换、管理等等问题,以及该数据模型施加的其他约束。NETCONF通过元素携带特定于设备的数据模型的配置数据,协议透明的对待该元素中的数据。设备使用能力集通告其实现的数据模型集合,能力定义了数据模型的操作和约束的细节。设备或管理器可以支持多个数据模型,包括标准的以及特有的数据模型。[在此处键入]RFC6241网络配置协议6子树过滤器6.1概览XML子树过滤是一种让或者的应答包含特定XML子树的机制。提供了一小组用于包含,简单的内容精确匹配和选择的过滤器,这允许使用一些有用的但非常有限的选择机制。子树过滤器在处理过程中,Server侧不需要使用任何特定数据模型的的语义,而只是使用简单的、集中式的实现策略。从概念上来说,子树过滤器是0或多个元素的子树,它表示一个过滤选择的筛选条件。在子树的每个包含层次,层次内的每个兄弟节点都被Server处理,以确定其子树和元素到根节点的路径是否应该被包含在过滤输出中。子树中每个节点表示一个包含性的过滤器,只有在Server上指定的数据存储里的底层数据模型关联的节点才能被过滤器选择。如果一个节点匹配过滤器的选择条件和过滤器中给定的元素层次,则选择该节点,只是需要将过滤器绝对路径名调整为从下面的层开始。译者注:子树过滤器表达的层次关系不是绝对的路径,而是相对路径,只要底层数据结构的层次路径中完全包含子树过滤器的层次关系,而不是底层数据结构的最顶层元素必须和子树过滤器的顶层元素必须一致。应答消息中只包含被过滤器命中的子树。请求中的任何选择条件(在特定的选定子树中)也包含在应答消息中。需要注意的是,在过滤器中作为叶子节点的元素将会在过滤输出中被展开(即包含子树)。如果请求包含多个选择相同数据的过滤器子树表达式,则特定数据实例在响应中不该重复。6.2子树过滤器组件一个子树过滤器由XML元素和他们的属性组成。在子树过滤器中存在5种类型的组件:o名称空间选择-NamespaceSelectiono属性匹配表达式-AttributeMatchExpressionso容器节点(有子元素的节点)-ContainmentNodes-o选择节点-SelectionNodeso内容匹配节点-ContentMatchNodes[在此处键入]RFC6241网络配置协议6.2.1名称空间选择当元素里一个特定节点的namespace和底层数据模型的namespace一致,则认为名称空间匹配。需要注意的是,名称空间选择不能独自使用,如果想要任何元素包含在过滤结果中,则在过滤器中必须至少指定一个元素。子树过滤器定义了XMLnamespace的通配(野匹配)机制。如果的元素没有限定namespace(比如xmlns=””),则Server侧在处理该子树过滤器节点时,必须评估它支持的所有namespace。这个通配机制不适用于XML属性。请注意,在将过滤器元素与底层数据模型中的元素进行比较时,和限定(qualified)名称空间的前缀值不相关。举例: 在本例中,元素是选择节点,则在该名称空间http://example.com/schema/1.2/config内节点,且其包含任何子节点(在底层数据模型中),都将会包含在过滤器输出中。6.2.2属性匹配表达式子树过滤器中的属性,是“属性匹配表达式”的一部分。任何数量的XML属性(限定的或非限定的)也许会出现在任何类型的过滤节点中。除了匹配正常的选择条件外,被选中的数据必须匹配该节点指定的每一个属性,如果一个元素没有包含指定的属性,则将其排除在过滤输出之外。举例: 在本例中,和两个元素是容器节点,元素选择节点,“ifName”是属性匹配表达式。该过滤器需要过滤出:在名字空间http://example.com/schema/1.2/config中的“interface”节点中属性值为“eth0”的节点,并且满足在“interfaces”、“top”层次中。[在此处键入]RFC6241网络配置协议6.2.3容器节点在子树过滤器中,包含子元素的节点称为容器节点(containmentnodes)。每个字节点可以是包含其他容器节点的节点。对于子树过滤器中的容器节点,所有匹配指定的名称空间、元素层次和任意属性匹配表达式的数据模型实例,都被包含在过滤器输出中。举例: 本例中,元素是容器节点。6.2.4选择节点过滤器中空叶子节点(没有包含子元素、没有内容)被称为“选择节点”,它是一个对底层数据模型的“显式选择”过滤器。一组同级节点中任何选择节点的存在将使过滤器选择指定的子树,并抑制基础数据模型中整个同级节点集的自动选择。出于过滤目的,一个空的叶子节点可以通过一个空tag(比如 )或者显式的开、结束标签对( )表示,这种形式忽略任何空格字符。举例: 本例中,元素是容器节点,元素是选择节点。只有在名称空间http://example.com/schema/1.2/config中的节点,并且必须出现在以为根节点配置数据模型中的节点,才能出现在过滤输出结果中,而底层数据结构中和同级的兄弟节点不会出现在过滤结果中(抑制基础数据模型中整个同级节点集的自动选择)。译者注:选择节点强调的是子树过滤器中空叶子节点,并不代表底层数据结构该节点没有叶子节点或内容。[在此处键入]RFC6241网络配置协议6.2.5内容匹配节点一个只包含简单内容的节点称为“内容匹配节点”,它用于匹配同级的某些或所有兄弟节点,它表现为对叶子节点内容的精确匹配。内容匹配节点有如下约束:o内容匹配节点不得包含子元素o多个内容匹配节点(兄弟节点)构成逻辑与关系o不支持混合内容过滤o不支持只有空格内容的过滤o内容匹配节点必须包含非空格字符,一个空元素(比如 )将被解释为一个选择节点(比如 )o前导和结尾的空格字符将被忽略,但是内容中间的空格字符不能别忽略或修改如果子树过滤器表达式中的所有指定的兄弟内容匹配节点都为真,则按照下述方式输出过滤出的节点:o所有兄弟集合中的每个内容匹配节点都被包含在过滤输出中o如果兄弟集合包含了容器节点,则需要进一步处理,并且当满足内嵌的过滤条件时也应该包含在过滤结果输出中o如果兄弟集合中包含任何选择节点,则在过滤输出结果中包含它们o如果选择节点的兄弟节点是一个概念性数据结构的实例标识组件(比如列表标识叶子),则同样将它们包含在过滤输出结果中o否则(比如在过滤兄弟集合中没有选择节点或容器节点),则该数据模型下同级的所有节点都应该被包含在过滤输出结果中如果同级的所有内容匹配节点有一个为假,则在该级的节点不需要进一步进行过滤处理,并且没有同级的子树被选择到过滤输出结果中,包括内容匹配节点。举例:fred 在这个例子中,和节点都是容器节点,节点是内容匹配节点。因为没有和同级的兄弟节点被指定(因此没有容器或选择节点),则和同级的所有兄弟节点都不会包含[在此处键入]RFC6241网络配置协议在过滤器输出结果中。并且只有属于名称空间http://example.com/schema/1.2/config,同时匹配元素层次关系,并且其元素内容为"fred"的节点将会被包含过滤器输出结果中。6.3子树过滤器处理将过滤输出结果(被选择命中节点的集合)初始化为空。每个子树过滤器可以包含一个或多个数据模型的片段,它表示在过滤器输出结果中被选择的数据模型的一部分(包括所有子节点)。每个子树数据片段被Server和其支持的内部数据模型做比较,如果整个子树数据片段过滤器(从根到过滤器指定的最内层元素)精确的和底层支持的数据模型的对应部分相匹配,则该节点一起所有孩子节点都被包含在结果中。服务端从根节点到叶子节点处理具有相同父亲节点(同级集)的所有节点。过滤器中的所有根元素被认为是同一兄弟集(假定他们有相同的名称空间),即使它们没有相同的父亲。对于每个兄弟集,Server确定哪些节点应该包含在过滤输出结果中,哪个兄弟子树被排除在过滤输出结果之外。Server首先确定在兄弟集合中出现了哪些类型的节点,然后按照对应类型的规则处理这些节点。如果兄弟集合中任何节点被选中,则处理被递归的应用到每个被选中节点的兄弟集上。这个算法一直持续,直到过滤器中指定的所有子树的所有兄弟集都被处理。6.4子树过滤器实例6.4.1无过滤器不包含过滤器的操作将返回整个数据模型。 [在此处键入]RFC6241网络配置协议6.4.2空过滤器一个空过滤器将会返回空,因为没有内容匹配或选择节点会出现。这不是一个错误。在本例中,元素的"type"属性在7.1章节会进一步讨论。 6.4.3选择整个子树在这个例子中的过滤器包含一个选择节点,所以只有该节点的子树被过滤器命中。这个例子展示了在随后的大多数实例中出现的完全填充的数据模型。在一个真实的数据模型了,一般不会随一个特定主机或网络的用户列表一起返回。注意:本文档中使用的过滤和配置实例中都以“http://example.com/schema/1.2/config”为名字空间,这个名字空间的根元素为,在这里元素及其后代仅仅表示示例配置数据模型。 [在此处键入]RFC6241网络配置协议root superuser CharlieRoot 1 1 fred admin FredFlintstone 2 2 barney admin BarneyRubble 2 3 下边的过滤器将会产生相同的结果,但是只是因为容器中只定义了一个孩子元素。[在此处键入]RFC6241网络配置协议 6.4.4选择子树的所有元素这个过滤器包含两个容器节点(和)和一个选择节点。兄弟集合中元素所有实例都被命中。Client也许需要知道在这个实例中的被用作实例的标识,但是Server为了处理这个Request,并不需要知道元数据。[在此处键入]RFC6241网络配置协议root fred barney 6.4.5选择特定的元素这个过滤器包含两个容器节点(,)和一个内容匹配节点。兄弟集合中包含且其取值为“fred”的所有实例都被过滤出来。fred [在此处键入]RFC6241网络配置协议fred admin FredFlintstone 2 2 6.4.6从元素中指定元素这个过滤器包含两个容器节点(,)和一个内容匹配节点,以及两个选择节点(,)。和、同级的元素的内容为“fred”的所有实例都会被过滤器命中。而不会被选择,是因为兄弟集包括了选择节点。fred [在此处键入]RFC6241网络配置协议fred admin FredFlintstone 6.4.7多个过滤树这个过滤器包含3个子树(name=root,fred,barney)。“root”子树过滤器包含两个容器节点(,),一个内容匹配节点,一个选择节点。这个子树选择标准被满足,并且只有“root”的company-info子树被过滤器输出结果选择。“fred”子树过滤器包含三个容器节点(,,),一个内容匹配节点,和一个选择节点。这个子树选择标准被满足,并且只有内容为“fred”的节点compan-info子树的元素包含在过滤输出结果中。“barney”子树过滤器包含3个容器节点(,,),两个内容匹配节点(,),和一个选择节点()。子树选择判定条件没有得到满足,因为用户“barney”不是“superuser”,并且“barney”的整个子树(包括其父亲user条目)都被排除在过滤输出结果之外。root fred [在此处键入]RFC6241网络配置协议barney superuser root 1 1 fred 2 6.4.8带属性的元素在这个例子中,过滤器包含一个容器节点,一个属性匹配表达式“ifName”,以及一[在此处键入]RFC6241网络配置协议个选择节点。子树中所有包含“ifName”属性,且取值为“eth0”的实例都过滤器命中。过滤器数据元素和属性都是限定的(qualified),因为如果是不限定的(unqualified),“ifName”属性将不被认为是名称空间“schema/1.2”的一部分。45621 774344 如果“ifName”是一个子节点而不是属性的话,如下的请求将产生相同的结果。eth0 [在此处键入]RFC6241网络配置协议 7协议操作NETCONF协议为管理设备配置数据和检索设备状态信息,定义了一个基础的操作集合。基础协议部分提供了检索、配置、拷贝和删除配置数据存储的操作,设备可以通过广播能力提供其他操作。基础协议部分包含了如下几个协议操作:ogetoget-configoedit-configocopy-configodelete-configolockounlockoclose-sessionokill-session协议操作可能因为包括“不支持的操作”的多种原因失败,协议操作的发起者不应该假定任何一种操作都总是会成功,任何RPC应答都应该价差是不是一个错误应答。协议操作的语法和XML编码在附录C中通过YANG模块定义。如下的章节描述每个协议操作的语义。7.1描述:检索配置数据存储的部分或全部。参数定义:source:当前查询的配置数据存储的名字,比如 filter:过滤器,该参数标识了被检索配置数据存储的哪一部分。如果不存在该参数,则返回整个配置数据。元素也许会包含可选的“type”属性,这个属性标识所在使用的过滤语法。NETCONF协议默认的过滤机制是第6章定义的子树过滤,“subtree”显式表明使用该过滤类型。如果NETCONF通信双方支持:xpath能力(8.9章节),type属性取值“xpath”表明在元素的“select”属性包含一个XPath表达式。PositiveResponse:成功应答,如果设备可以满足这个请求,Server侧发送元素,[在此处键入]RFC6241网络配置协议且通过元素返回查询的结果。NegativeResponse:失败应答,在中返回一个,表明由于某种原因无法完成此次请求。示例:查询整个子树。 root superuser CharlieRoot 1 1 第6章包括子树过滤的更多示例。[在此处键入]RFC6241网络配置协议7.2描述:操作加载所有或部分配置数据到指定的目标配置数据存储。该操作以多种方式表达新的配置数据,比如使用本地文件、远程文件或者内嵌在请求中。如果目标配置数据存储并不存在,则创建它。如果NETCONF通信双方支持:url能力(8.8章节),则可以替代参数。设备分析源和目标配置数据,并且执行请求的变化。和消息一样,目标配置数据没必要被替换,而是根据源数据和请求的操作变更目标配置数据。如果操作包含了多个子操作,但是操作的是底层数据模型上同样概念上的节点,则操作结果是未定义的(即超出NETCONF协议的范围)。属性定义:operation:子树的元素可以包含一个”operation”属性,它属于3.1章节定义的NETCONF名称空间。该属性表明其所在的配置需要执行的操作,并且该属性可能会在子树中的多个元素之中。如果没有“operation”属性,则配置数据应该合并(merge)到配置数据存储。“operation”属性的取值如下:merge:合并,元素中包含该属性值的配置数据应该被合并到以为标识的配置数据存储的相同层次的配置数据中。这是默认行为。replace:替换,元素中包含该属性值的配置数据应该替换以标识的配置数据存储中的相关配置。如果配置数据存储中不存在该配置,则创建它。该操作不像操作会整个目标配置,而只会影响参数指定的配置。create:创建,元素中包含该属性值的配置数据应该且只应该在配置数据存储中不存在该配置数据时才添加到配置数据库。如果配置数据已经存在,则应该返回元素,且携带一个取值为"data-exists"的元素。delete:删除,元素中包含该属性值的配置数据应该且只应该在配置数据存储中存在该配置数据时将其删除。如果配置数据不存在,则返回元素,且携带一个取值为"data-exists"的元素。remove:移除,元素中包含该属性值的配置数据应该且只应该在配置数据存储中存在该配置数据时将其删除。如果配置数据不存在,则该移除操作被Server无声的忽略。参数定义:target:目标,当前编辑的配置数据存储的名字,比如 或者 default-operation:默认操作,为本次选择的默认操作(和上边描述[在此处键入]RFC6241网络配置协议的"operation"属性一样)。参数的默认值是"merge",该参数是可选的,但是如果存在,它的取值范围如下:1.merge:合并,参数中的配置数据被合并到目标数据存储的对应层次的配置数据中,这是默认操作。2.replace:替换,参数中的配置数据将替换目标数据存储的对应层次的配置数据,这对加载之前保存的配置数据是有帮助的。3.none:目标数据存储不受参数中的配置数据的影响,除非且直到输入的配置数据使用"operation"属性请求不同的操作。如果参数中的配置数据在目标数据存储中并不存在相应的层次,则返回携带取值为data-missing的元素的应答。使用none操作,允许像"delete"操作去避免无意间创建被删除元素的父亲层次节点。译者注:因为子树中的元素的“operation”属性的默认值是合并,当被删除的元素深度比较大时,可能会导致无意间创建被删除元素的父亲(含)层次上的节点。test-option:测试选项,该选项在设备通告其支持:validate:1.1(参考8.6章节)时也许会指定。元素取值范围如下:test-then-set:在设置前执行一个有效性验证。如果验证时发生错误,则不执行操作,这是test-option的默认行为。set:不先执行验证操作,直接执行设置操作。test-only:不执行设置操作,只执行验证工作。error-option:元素取值如下:stop-on-error:操作遇到错误时终止执行,此为默认行为;continue-on-error:遇到错误时继续处理,错误被记录,并生成失败应答;rollback-on-error:如果遇到了错误,生成了”error”级别的元素,Server将停止处理操作,并且恢复指定的配置数据到执行前的状态。此选项要求Server支持在8.5章节中定义的:rollback-on-error能力。config:配置,设备的数据模型定义的配置数据层次结构,内容必须被置于一个合适的名称空间,以允许匹配合适的数据模型,同时内容必须遵循其能力定义的数据模型的限制。能力集在第8章讨论。PositiveResponse:成功应答,如果设备可以满足请求的操作,则发送包含元素的NegativeResponse:失败应答,如果请求由于任何原因不能被满足,则返回应答NegativeResponse:Anresponseissentiftherequestcannotbecompletedforanyreason.实例:[在此处键入]RFC6241网络配置协议的实例使用了一个简单的数据模型,其中可以呈现多个元素的实例,并且每个实例通过作为区分(索引)。设置running配置中的"Ethernet0/0"接口的MTU为1500:Ethernet0/0 1500 向running配置数据增加一个名字为"Ethernet0/0"的接口,替换先前该接口名称的配置。Ethernet0/0 1500 192.0.2.4 24 [在此处键入]RFC6241网络配置协议 从running配置中删除一个名字为"Ethernet0/0"的接口:none Ethernet0/0 从OSPF区域删除接口192.0.2.4(配置在相同区域的其他接口不受影响)none [在此处键入]RFC6241网络配置协议0.0.0.0 192.0.2.4 7.3描述:使用另一个完整的配置数据存储创建或替换整个配置数据存储,如果目标配置数据存储存在,则覆盖之;否则,如果允许的话,则创建它。如果NETCONF双方支持:url能力(章节8.8),则元素可以出现在或参数中;即使当设备通告其支持:writable-running能力时,一个设备也许不会选择支持让 配置数据存储作为操作的参数。一个设备也许会选择器不支持远程到远程的拷贝操作,即和参数都使用元素。如果和标识了相同的URL或者配置数据存储,必须返回一个error-tag包含"invalid-value"的错误应答。参数:target:目标,操作的目标配置数据存储的名字source:源,操作的源配置数据存储的名字PositiveResponse:成功应答,如果设备可以满足请求的操作,则返回包含元素的应答NegativeResponse:如果请求因为任何原因不能满足,则返回包含元素的应答。[在此处键入]RFC6241网络配置协议实例:https://user:password@example.com/cfg/new.txt 7.4描述:删除一个配置数据存储。 配置数据存储不能删除。如果NETCONF双方支持:url能力(8.8章节),则元素可以出现在参数里。参数:target:要删除的配置数据存储的名字。PositiveResponse:成功应答,如果设备可以满足请求的操作,返回一个包含元素的应答。NegativeResponse:失败应答,如果设备由于任何原因不能满足请求的操作,则返回一个包含元素的应答。实例: [在此处键入]RFC6241网络配置协议 7.5描述:操作允许Client锁定设备上的整个配置数据存储系统。这些锁预期是短暂的,允许Client不受其他NETCONFClients、非NETCONFClients(SNMP、CLI等)、以及其他人为操作的干预下完成配置变更。如果一个现存的会话或其他实体持有了目标数据存储的任一部分配置的锁,则尝试锁定该配置数据存储必须失败。如果拿到了锁,除非是持有该锁的会话,Server必须防止其他实体或会话对锁定资源的任何变更。SNMP和CLI请求修改锁定的资源时,必须返回一个合适的错误。锁的持续时间,从获取到锁一直持续到NETCONF会话关闭或者锁被释放。会话关闭可以是Client显式执行的,或者是Server基于其对底层传输层通信失败隐式执行的,比如非活动超时、检测到Client的异常行为。具体评判准则由底层的传输实现决定。操作携带必选参数,该参数确定了要锁定的配置数据存储的名字。当锁处于活动室,使用操作被锁定的配置数据存储,使用操作将被锁定的配置数据存储作为目标时,都不是被允许的。另外,系统也将保证这些锁定的配置数据不能被非NETCONF管理操作所修改,比如SNMP和CLI。操作可以用于强制释放其他NETCONF会话持有的锁,如何打断其他实体持有的锁,超出了本协议规定的范围。如下任意一个条件满足时,则不能拿到锁:其他实体或NETCONF会话已经持有锁目标配置是,并且它已经被修改,并且这些变化还没有被提交或者回滚目标配置是,并且其他NETCONF会话已经发起一个正在确认的提交操作(8.4章节)Server必须以y元素或者作出应答。如果持有锁的会话由于任何原因终止,锁将会被系统释放。参数:target:要锁定的配置数据存储的名字PositiveResponse:成功应答,如果设备可以满足请求的操作,则返回携带元素的应答。[在此处键入]RFC6241网络配置协议NegativeResponse:失败应答,如果请求的操作因为任何原因无法被满足,则返回一个包含元素的应答。如果锁已经其他实体持有,则的内容是"lock-denied",并且元素将包含锁持有者的。如果锁被非NETCONF实体持有,则的值为0。需要注意的是,任何实体在目标配置的一部分持有锁时,都将阻止NETCONF(该锁是全局的)对目标加锁(NETCONF锁是全局锁)。实例:如下的例子显示了成功获取锁的例子。 下边的例子展示了获取一个正在使用的锁,从而失败的例子。protocol lock-denied error Lockfailed,lockisalreadyheld [在此处键入]RFC6241网络配置协议454 7.6描述:操作用于释放一把配置锁,该锁之前通过操作获取。在如下某个条件为真时,操作都不会成功。指定的锁时非活动的发起的会话和获取锁的会话不是同一个Server必须以或作为应答。参数:target:待解锁的配置数据存储的名字。一个NETCONFClient要解锁不是其锁定的配置数据存储的锁,是不被允许的。PositiveResponse:成功应答,如果设备可以满足请求的操作,则返回携带元素的应答。NegativeResponse:失败应答,如果设备不能完成请求的操作,则返回携带元素的应答。实例: [在此处键入]RFC6241网络配置协议7.7描述:操作用于检索运行时配置和设备状态信息。参数:filter:该参数指示了待检索的系统配置的哪一部分或者状态数据。如果不存在这个参数,则返回所有的配置数据和状态数据。元素也会包含可选的"type"属性,这个属性指定了元素中使用的过滤器语法的类型。NETCONF默认的过滤机制是第6章描述的子树过滤,该属性取值"subtree"显式指定了子树过滤。如果NETCONF双方支持:xpath能力(8.9章节),取值"xpath"时也许用于指示元素的"select"属性包含了XPath表达式。PositiveResponse:成功应答,如果设备可以满足请求的操作,则返回,其中元素包含了合适的子集。NegativeResponse:失败应答,如果由于任何原因请求的操作不能被满足,则返回一个包含的应答。实例:eth0 eth0 45621 [在此处键入]RFC6241网络配置协议774344 7.8描述:用于优雅的终止一个NETCONF会话。当NETCONFServer收到请求时,它将优雅的关闭会话。Server将释放该会话相关的任何锁和资源,并优雅的关闭任何关联的连接。在之后的任何其他NETCONF请求都会被忽略掉。PositiveResponse:成功响应,如果设备可以满足请求的操作,则返回一个携带元素的应答。NegativeResponse:如果请求的操作不能被满足,则返回一个包含的应答。实例: 7.9描述:强制终止NETCONF会话。当NETCONF实体收到一个对正在打开的会话的请求时,它将终止当前正在进行的任何处理,释放该会话关联的任何锁和资源,同时关闭底层的任何连接。如果一个NETCONFServer在处理一个confirmed的提交操作时收到一个请求,它必须恢复配置数据到confirmed提交发起之前的状态。否则的话,操作不必回滚持有锁实体生成的配置和其他状态修改。参数:session-id:被终止的NETCONF会话的ID。如果取值和当前的会话ID一致,返回一个"invalid-[在此处键入]RFC6241网络配置协议value"错误。PositiveResponse:成功应答,如果请求的操作被满足,则返回一个携带元素的应答。NegativeResponse:失败应答,如果请求的操作由于任何原因不能被满足,返回一个携带元素的应答。实例:4 8能力集(Capabilities)本章定义了Client和Server可能实现的一组能力集。每一方通过在初始能力集交换消息中通告自身支持的能力,每一方只需理解他们要使用的能力集,忽略他们不需要或者不理解的能力集。其他的能力集可以使用附录D中的模板定义。将来的能力集定义可以由标准机构作为标准发布,也可以作为专有扩展发布。NETCONF能力通告URI标识,基础的能力集使用的URN遵循RFC3553定义的方法。本规范中定义的能力集的URN格式为:urn:ietf:params:netconf:capability:{name}:1.x{name}是能力的名字,能力集标识在邮件中或人们讨论时,通常用:{name}或者:{name}:{version}(如果这个能力存在多个版本时)这个简短形式。比如能力foo的正式名字为:"urn:ietf:params:netconf:capability:foo:1.0",被称为":foo"。但是简短格式不得应用在协议内部之中。[在此处键入]RFC6241网络配置协议8.1能力集交换能力集在双方会话建立阶段的消息中相互通告。当NETCONF会话打开时,双方都必须发送一个包含自身支持能力集的元素给对方。每方都必须至少发送基础NETCONF能力:"urn:ietf:params:netconf:base:1.1"。支持之前NETCONF协议版本的一方,也许会发送包含老版本的能力集,已表示其支持多个协议版本。NETCONF双方必须检查和对方有一个公共的协议版本。当比较协议版本能力URI时,只需要比较基础部分,即使URI字符串后边存在任何参数。如果未找到双方公共的版本,则NETCONF双方不得继续该会话,如果双方存在多个公共的协议版本,则使用最高的(最近的)协议版本。Server发送的元素中必须包含指示本次NETCONF会话的元素,但是Client发送的元素中不得包含元素。当Server收到包含元素的消息时,必须终止NETCONF会话;同样,Client收到不带元素的消息时,也必须终止NETFCONF会话(不必先发送)。在如下的例子中,Server侧通告了基础NETCFON能力、一个基本NETCONF协议定义的能力、一个特定实现的能力。urn:ietf:params:netconf:base:1.1 urn:ietf:params:netconf:capability:startup:1.0 http://example.net/router/2.3/myfeature 4 NETCONF双方在连接打开时同时发送本端的元素,一放不得等待接收到对方的能力集后才发送自身的能力集。[在此处键入]RFC6241网络配置协议8.2Writable-Running能力8.2.1描述这个:writable-running能力表示设备支持直接写配置数据存储。换句话说,设备支持以作为和的操作的目标。8.2.2依赖无8.2.3能力标识符:writable-running能力被如下的能力字符创标识:urn:ietf:params:netconf:capability:writable-running:1.08.2.4新增操作无8.2.5对现有操作的修改8.2.5.1:writable-running能力使得操作可以以元素作为。8.2.5.2:writable-running能力使得操作可以以元素作为。8.3Candidate配置能力8.3.1描述候选(candidate)配置能力:candidate,指示设备支持候选配置数据存储,它可以被用来保存可以操作但不影响设备当前配置的配置数据。候选配置数据是设备配置数据的全集,它是一个可以服务于创建、操作配置数据的地方,除此之外,删除和变更也可以用于该候选配置数据以方便构造期望的配置数据。任何时刻都可以通过操作使得候选配置数据同步到设备running配置数据。[在此处键入]RFC6241网络配置协议操作有效地将运行配置设置为候选配置的当前内容。尽管可以将其建模为简单的copy操作,但是出于多种原因,它应该使用不同与copy的操作来完成。为了作为第一类操作在高层次概念上的一致性,我们允许开发人员可以更清楚地看清Client的请求和Server必须执行的操作。这样可以使意图更加明显,使特殊情况不那么复杂,并且操作之间的交互更加直接。例如,:confirmed-commit:1.1能力(第8.4节)使用“copyconfirmed”操作是没有意义的。候选配置可以在多个会话间共享。除非一个Client具有不共享候选配置的特定信息,否则它必须假定其他会话能够同时修改候选配置,基于此,一个Client在修改候选配置前应该谨慎的加锁。Client可以通过执行操作,去丢弃对候选配置任何未经提交的修改,这个操作将候选配置的内容回退到运行配置同样的内容。8.3.2依赖无8.3.3能力标识符:candidate能力的标识使用如下字符串:urn:ietf:params:netconf:capability:candidate:1.08.3.4新操作8.3.4.1描述:当候选配置完成修改后,配置数据可以被提交,发布配置数据集合到设备的其他部分,并且要求设备的行为与新配置的描述保持一致。使用操作,将候选配置提交到设备新的当前配置。操作知识设备去实现候选配置中包含的配置数据。如果设备不能提交候选配置数据存储的所有变化,则运行配置数据必须保持不变。如果设备确实提交成功,则运行配置必须被候选配置的内容更新。如果运行或候选配置当前被其他会话锁住,操作必须返回取值为"in-use"的失败应答。如果系统没有:candidate能力,则操作是不可用的。PositiveResponse:成功应答,如果设备能够满足请求,返回携带元素的应答。NegativeResponse:失败应答,实例:[在此处键入]RFC6241网络配置协议 8.3.4.2如果Client决定候选配置不需要提交,则操作可以用来将候选配置的内容还原到运行配置中的内容。 这个操作通过将候选配置还原为运行配置中的内容,从而丢弃任何未提交的配置变化。8.3.5对现有操作的修改8.3.5.1,,和候选配置可以作为或者参数用作、、或者操作的源或者目的。元素用于表示候选配置: 8.3.5.2和候选配置使用操作锁定候选配置,此时参数将携带元素:[在此处键入]RFC6241网络配置协议 同样地,可以使用元素作为的参数来解锁候选配置: 如果客户端因对候选配置的重大更改而失败,则恢复将很困难。为了方便恢复,释放锁时,任何显着的更改都将被丢弃,无论是显式地使用操作还是隐式地由于会话失败而被删除。8.4确认提交能力8.4.1描述能力:confirmed-commit:1.1指示Server支持操作,以及操作可以支持、、、参数。参考8.3节了解操作的细节。如果在超时时间(默认600s=10分钟)内,没有发起一个confirming操作,则confirmed操作必须被还原,其中confirming操作是指一个不带参数的操作,超时时间可以通过参数调整,如果在超时前,又发起了一个confirmed操作,则定时器被重置(默认值是600s)。confirming提交和其后的confirmed操作都也许对配置引入额外的变化。如果confirmed操作中没有指定元素,任何随后的提交和confirming提交都必须在和confirmed操作相同的会话上发起。如果confirmed操作指定了元素,则随后的提交和confriming提交可以从任何会话上发起,不过他们必须包含一个元素,其取值必须等于元素中给定的值。如果Server也通告:startup能力,则从running到startup配置的以保存相对startup的变化也是必要的。如果会话发起的confirmed提交在确认超时前由于任何原因被终止,Server必须将配置复原到[在此处键入]RFC6241网络配置协议confirmed提交发起前的状态,除非confirmed提交同时包含了元素。如果一个设备在确认超时提交前由于任何原因重启,Server必须将配置的状态复原到confirmed提交发起前的状态。如果一个confirming提交没有发起,设备必须还原其配置状态到confirmed提交发起前的状态。取消一个ocnfirmed提交和还原变化,不需要等待确认超时时间到期,Client可以使用显式要求还原配置数据到confirmed提交前的状态。对于共享的配置,这个特性可能导致其他配置变化(比如,通过其他NETCONF会话)被无意更改或移除,除非是用了配置锁特性(换句话说,配置锁是在发起前获取的)。因此,强烈建议对于共享配置使用该特性时,应该配套配置锁一起使用。这个能力的1.0版本在RFC4741中定义,本文档定义了1.1版本,并且在1.0版本上扩展了新的操作,以及两个参数和。为了和老的Clients保持后向兼容性,符合本规范的服务器可能会发布1.0版本,而不是1.1版本。8.4.2依赖:confirmed-commit:1.1能力依赖:candidate能力。8.4.3能力标识符:confirmed-commit:1.1能力的标识符为:urn:ietf:params:netconf:capability:confirmed-commit:1.18.4.4新操作8.4.4.1描述:取消正在进行的confirmed提交。如果未给定参数,则操作必须和发起confirmed提交相同的会话上发起。参数:persist-id:表示取消一个持久的confirmed提交。其值必须是操作中给定的参数。如果不匹配,则操作以返回"invalid-value"错误失败成功应答:PositiveResponse,如果设备可以满足请求的操作,返回携带元素的应答。失败应答:NegativeResponse,如果请求由于任何原因不能完成,则返回包含元素的[在此处键入]RFC6241网络配置协议应答。实例: rpc-replymessage-id="102"xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> 8.4.5对现有操作的修改8.4.5.1:confirmed-commit:1.1能力为操作增加了4个额外的参数。参数:comfirmed:执行一个confirmed操作。confirm-timeout:confirmed提交的超时时间,默认600s。persist:使得confirmed提交可以跨会话保持,并且为正在进行的confirmed提交分配一个tokenpersist-id:用于在任何会话中发起随后的confirmed提交或者confirming提交,需要携带之前操作指定的token。实例:120 [在此处键入]RFC6241网络配置协议 实例:IQ,d4668 IQ,d4668 8.5遇错回滚能力8.5.1描述该能力指示Server将在操作中,支持携带取值为"rollback-on-error"的参数。对于共享的配置,这个特性可能导致其他配置变化(比如,通过其他NETCONF会话)被无意更改或移除,除非是用了配置锁特性(换句话说,配置锁是在发起前获取的)。因此,强烈建议对于共享[在此处键入]RFC6241网络配置协议配置使用该特性时,应该配套配置锁一起使用。8.5.2依赖无8.5.3能力标识符:rollback-on-error能力的标识符为:urn:ietf:params:netconf:capability:rollback-on-error:1.08.5.4新操作无8.5.5对现有操作的修改8.5.5.1:rollback-on-error能力允许在执行操作时,参数取值为"rollback-on-error"。rollback-on-error Ethernet0/0 100000 [在此处键入]RFC6241网络配置协议 8.6验证能力8.6.1描述验证操作是将配置应用到设备前,对完整配置集进行的语法和语义错误的检查。如果声明了该能力,表示设备支持协议操作,并且至少支持对语法错误的检查。另外,这个能力支持操作指定参数,并且当指定该参数时,至少会检查语法错误。RFC4741定义了该能力的1.0版本,本文档定义了1.1版本,并且在1.0版本基础上给扩展了一个新的"test-only"取值。为了对老的Client的后向兼容性,支持本规范的实现也许会指定1.0版本,而不是1.1版本。8.6.2依赖无8.6.3能力标识符:validate:1.1能力的标识符字符串为:urn:ietf:params:netconf:capability:validate:1.18.6.4新操作8.6.4.1描述:该协议操作验证指定的配置的内容的合法性。参数:source:要验证的配置数据存储的名字,比如或者包含全部配置的元素的内容成功应答:PositiveResponse,如果设备可以满足请求的操作,则返回携带元素的应答失败应答:NegativeResponse,如果由于任何原因无法完成操作,则返回携带的应答。操作可以由于一系列的原因失败,比如语法错误、缺少参数、引用了非定义的配置数据、以及违反了底层数据模型的其他规则实例:[在此处键入]RFC6241网络配置协议 8.6.5对现有操作的修改8.6.5.1:validate:1.1能力修改操作,以接受参数。8.7startup配置能力8.7.1描述设备支持running和startup配置数据存储的分离。startup配置在设备启动时加载。影响running配置的操作不会自动拷贝到startup配置。一个显式的从到的操作可以用来将当前running配置的内容拷贝到starup配置中。NETCONF协议使用表示引用startup数据存储。8.7.2依赖无8.7.3能力标识符:startup能力的标识符为:urn:ietf:params:netconf:capability:startup:1.08.7.4新操作无[在此处键入]RFC6241网络配置协议8.7.5对现有操作的修改8.7.5.1整体描述:startup能力给现有的一些NETCONF操作增加了 配置数据存储作为参数。Server必须支持如下附加的取值:操作参数注意事项必须配套:validate:1.1恢复出厂保存startup配置,使用操作将配置数据存储拷贝到配置数据存储。 8.8URL能力8.8.1描述NETCONF双方拥有在和参数中接受元素的能力。通过指示支持的URL方案的URL参数进一步标识该功能。8.8.2依赖无[在此处键入]RFC6241网络配置协议8.8.3能力标识符:url能力标识符为:urn:ietf:params:netconf:capability:url:1.0?scheme={name,...}:url能力的URI必须包含"scheme"参数,该参数包含一个以逗号分隔的NETCONF双方支持的schema的列表。举例来说:urn:ietf:params:netconf:capability:url:1.0?scheme=http,ftp,file8.8.4新操作无8.8.5对现有操作的修改8.8.5.1:url能力修改了操作,使得元素可以作为参数的替代。url引用的文件包含了待修改的配置数据的层次结构,以XML形式编码在名字空间"urn:ietf:params:xml:ns:netconf:base:1.0"的元素内。即元素中内容描述了具体配置文件所在的位置。8.8.5.2:url能力修改了操作,使得参数可以作为和元素的取值。url引用的文件包含了待修改的配置数据的层次结构,以XML形式编码在名字空间"urn:ietf:params:xml:ns:netconf:base:1.0"的元素内。8.8.5.3:url能力修改了操作,使得元素可以作为元素的取值。8.8.5.4:url能力修改了操作,使得元素可以作为元素的取值。[在此处键入]RFC6241网络配置协议8.9XPath能力8.9.1描述XPath能力表示NETCONF双方支持在元素中国实用XPath表达式。XPath在[W3C.REC-xpath-19991116]中描述。XPath表达式使用的数据模型和XPath1.0[W3C.REC-xpath-19991116]相同,并且对根节点的孩子和XSLT1.0([W3C.REC-xslt-19991116]3.1章节)有相同的扩展。特别地,它意味着根节点也许有任意梳理的元素节点作为其孩子。XPath表达式按照如下方式评估:o声明的名字空间的结合在元素范围内o变量绑定的结合由数据模型定义,如果没有定义,集合是空的o功能库是核心功能库,加上数据模型定义的任何功能o上下文节点是根节点XPath表达式必须返回一个节点结合,如果它没有返回一个节点集合,则操作以"invalid-value"错误失败。应答消息包含被过滤器表达式选择的子树,对于每个子树(从数据模型根节点到子树的路径,包含了唯一标识子树的必要的任意元素或者属性集),都包含在应答消息中。特定数据实例不能在响应中重复出现。8.9.2依赖无8.9.3能力标识符:xpath能力标识符为:urn:ietf:params:netconf:capability:xpath:1.08.9.4新操作无8.9.5对现有操作的修改8.9.5.1和:xpath能力修改了和操作,使其元素的"type"属性可以取值[在此处键入]RFC6241网络配置协议为"xpath"。当"type"属性取值为"xpath"时,则必须出现"select"属性,"select"属性取值被认为是XPath表达式处理,用于过滤返回的数据。此时,元素的内容必须为空。选择表达式的XPath结果必须是节点集。节点集合中的每个几点必须是底层数据模型对应的节点。为了正确的表示每个节点,定义如下编码规则:o结果中的节点的所有的祖先节点必须先编码,所以应答中的元素包含了与底层数据结构对应的全部指定子树;o如果需要结果节点的任何同级节点或祖先节点来标识概念性数据结构内的特定实例,则这些节点也必须在响应中进行编码。举例来说:fred 2 [在此处键入]RFC6241网络配置协议9安全考虑本章提供了基础NETCONF消息层和协议基本操作的安全问题一些考虑。NETCONF传输层的安全考虑在传输层文档中提供,NETCONF操作的内容的安全考虑可以在数据模型定义的文档中找到。本文档没有指定授权方案,因为这样的方案通常要和元数据模型还活着数据模型绑定到一起。实现应该为NETCONF提供一个全面的授权方案。NETCONFServer对每个独立用户的授权也许会或不会1:1映射到其他的接口。首先,数据模型也许是不兼容的。其次,它更期望与基于安全传输层提供的授权机制(比如SSH、BEEP等等)。另外,对配置的操作,如果这些操作没有被正在操作的文件或对象的全局锁所保护,可能产生非预期的结果。比如,如果running配置未被加锁,则可能会在不知情的情况下将部分完整的访问列表从candidate配置提交给candidate配置锁的所有者,从而导致设备不安全或不可访问。这里是说,B在将running配置拷贝到candidate配置,但是其只对candidata加锁,未对running加锁,有可能A用户正在操作running配置,从而导致拷贝到candidate的配置不一致。配置信息天然就是敏感的,如果它以明文或缺乏完整性检查的方式传输,将会使设备面对传统的窃听和错误数据的注入性攻击。配置信息通常包含密码、用户名、服务描述、拓扑信息,所有这些都是敏感的。基于此,此协议的实现必须仔细的考虑和其他管理接口一样面对的各种可能的攻击方式。因此,本协议至少应该支持机密性和认证。可以预期,基础协议(SSH,BEEP等)将根据需要提供机密性和身份验证。同时进一步希望NETCONF会话双方的身份对对端都是可用的,用以确定指定请求的授权。一方也可以预想到用于授权的其他信息,比如传输和加密方法。NETCONF本身不提供重新认证的方法,更不用说认证了。所有这些动作都发生底层。在认证之前和之后,不同的环境可能会允许不同的权限,因此,本文档不指定认证模型。当一个操作没有合适的授权时,一个简单的"accessdenied"应答就足够了。需要的是,授权信息可以通过配置信息的形式交换,这是确保连接安全的更重要的原因。已经提到过,需要认识到的很重要的一点是,某些操作从本质上显然比其他操作更敏感。比如,向startup或者running配置进行操作,显然不是一个常规的操作,而却是。此类全局操作必须禁止更改个人无权执行的信息。比如,用户A不允许修改接口的IP地址,但是用户B已经在数据存储上修改了该接口的IP地址,那么用户A不允许提交配置。同样地,仅因为有人说“通过URL能力指定位置的配置去修改某个配置存储”,但这并不意味着元素将在没有适当授权的情况下进行配置。操作将证明NETCONF适用于至少具有管理员信任的系统。就像本文档指出的那样,可以锁定主体[在此处键入]RFC6241网络配置协议可能无法访问的配置部分,毕竟,整个配置都是锁定的。为了减轻这个问题,有两种手段:如果一个人知道有问题的会话的会话标识符,就可以从NETCONF中以编程方式杀死另一个NETCONF会话;另一个可行的方法在设备的本机接口中提供解除锁的方法。这两种机制都存在竞争状况,可以通过从认证,授权和计费(AAA)服务器中删除有问题的用户来缓解竞争状况。但是,这种解决方案并非在所有部署方案中都有用,例如使用SSH公钥/私钥对的部署方案。10IANA考虑10.1NETCONFXML名称空间本文档在RFC3688IETFXML注册中心登记了NETCONFXML名称空间的URI。IANA已经将如下URI指向本文档。URI:urn:ietf:params:xml:ns:netconf:base:1.0注册人:TheIESG.XML:N/A,请求的URI是XML名称空间。10.2NETCONFXML模式本文档在RFC3688IETFXML注册中心登记了NETCONFXML模式的URI。IANA已经将如下URI指向本文档。URI:urn:ietf:params:xml:schema:netconf注册人:TheIESG.XML:参见附录B10.3NETCONFYANG模型本文档在RFC6020YANG模型名字管理中心登记了YANG模型。名字:ietf-netconf名称空间:urn:ietf:params:xml:ns:netconf:base:1.0前缀:nc参考:RFC6241[在此处键入]RFC6241网络配置协议10.4NETCONF能力URNIANA已经创建并正在维护“网络配置(NETCONF)协议能力URNs”的注册表,用以维护NETCONF能力标识符。添加新标识符需要走IETF标准流程。IANA已经更新如下的能力标识符指向本文档。索引能力标识符:writable-runningurn:ietf:params:netconf:capability:writable-running:1.0:candidateurn:ietf:params:netconf:capability:candidate:1.0:rollback-on-errorurn:ietf:params:netconf:capability:rollback-on-error:1.0:startupurn:ietf:params:netconf:capability:startup:1.0:urlurn:ietf:params:netconf:capability:url:1.0:xpathurn:ietf:params:netconf:capability:xpath:1.0IANA已向注册表添加了以下能力:索引能力标识符:base:1.1urn:ietf:params:netconf:base:1.1:confirmed-commit:1.1urn:ietf:params:netconf:capability:confirmed-commit:1.1:validate:1.1urn:ietf:params:netconf:capability:validate:1.111贡献人除编辑人员外,本文档作者包括:KenCrozier,CiscoSystemsTedGoddard,IceSoftEliotLear,CiscoSystemsPhilShafer,JuniperNetworksSteveWaldbusserMargaretWasserman,PainlessSecurity,LLC12致谢作者要感谢NETCONF工作组的所有成员。特别地,我们要感谢WesHardaker在协助我们进行安全考虑[在此处键入]RFC6241网络配置协议方面的坚持和耐心,我们还要感谢RandyPresuhn,SharonChisholm,GlennWaters,DavidPerkins,WeijingChen,SimonLeinen,KeithAllen,DaveHarrington,LadislavLhotka,TomPetch,和KentWatsen,感谢他们提出的宝贵建议。13参考文档13.1规范性引用[RFC2119]Bradner,S.,"KeywordsforuseinRFCstoIndicateRequirementLevels",BCP14,RFC2119,March1997.[RFC3553]Mealling,M.,Masinter,L.,Hardie,T.,andG.Klyne,"AnIETFURNSub-namespaceforRegisteredProtocolParameters",BCP73,RFC3553,June2003.[RFC3629]Yergeau,F.,"UTF-8,atransformationformatofISO10646",STD63,RFC3629,November2003.[RFC3688]Mealling,M.,"TheIETFXMLRegistry",BCP81,RFC3688,January2004.[RFC3986]Berners-Lee,T.,Fielding,R.,andL.Masinter,"UniformResourceIdentifier(URI):GenericSyntax",STD66,RFC3986,January2005.[RFC5717]Lengyel,B.andM.Bjorklund,"PartialLockRemoteProcedureCall(RPC)forNETCONF",RFC5717,December2009.[RFC6020]Bjorklund,M.,"YANG-ADataModelingLanguagefortheNetworkConfigurationProtocol(NETCONF)",RFC6020,October2010.[RFC6021]Schoenwaelder,J.,"CommonYANGDataTypes",RFC6021,October2010.[RFC6242]Wasserman,M.,"UsingtheNETCONFConfigurationProtocoloverSecureShell(SSH)",RFC6242,June2011.[W3C.REC-xml-20001006]Sperberg-McQueen,C.,Bray,T.,Paoli,J.,andE.Maler,"ExtensibleMarkupLanguage(XML)1.0(SecondEdition)",[在此处键入]RFC6241网络配置协议WorldWideWebConsortiumREC-xml-20001006,October2000,.[W3C.REC-xpath-19991116]DeRose,S.andJ.Clark,"XMLPathLanguage(XPath)Version1.0",WorldWideWebConsortiumRecommendationREC-xpath-19991116,November1999,.13.2信息参考[RFC2865]Rigney,C.,Willens,S.,Rubens,A.,andW.Simpson,"RemoteAuthenticationDialInUserService(RADIUS)",RFC2865,June2000.[RFC3470]Hollenbeck,S.,Rose,M.,andL.Masinter,"GuidelinesfortheUseofExtensibleMarkupLanguage(XML)withinIETFProtocols",BCP70,RFC3470,January2003.[RFC4251]Ylonen,T.andC.Lonvick,"TheSecureShell(SSH)ProtocolArchitecture",RFC4251,January2006.[RFC4741]Enns,R.,"NETCONFConfigurationProtocol",RFC4741,December2006.[RFC5246]Dierks,T.andE.Rescorla,"TheTransportLayerSecurity(TLS)ProtocolVersion1.2",RFC5246,August2008.[W3C.REC-xslt-19991116]Clark,J.,"XSLTransformations(XSLT)Version1.0",WorldWideWebConsortiumRecommendationREC-xslt-19991116,November1999,.附录A:NETCONF错误码列表本章节是规范性的。下边列出了每个error-tag元素,以及其有效的error-type和error-severity值,以及必要的error-info。[在此处键入]RFC6241网络配置协议error-tag:in-useerror-type:protocol,applicationerror-severity:errorerror-info:noneDescription:Therequestrequiresaresourcethatalreadyisinuse.error-tag:invalid-valueerror-type:protocol,applicationerror-severity:errorerror-info:noneDescription:Therequestspecifiesanunacceptablevalueforoneormoreparameters.error-tag:too-bigerror-type:transport,rpc,protocol,applicationerror-severity:errorerror-info:noneDescription:Therequestorresponse(thatwouldbegenerated)istoolargefortheimplementationtohandle.error-tag:missing-attributeerror-type:rpc,protocol,applicationerror-severity:errorerror-info::nameofthemissingattribute:nameoftheelementthatissupposedtocontainthemissingattributeDescription:Anexpectedattributeismissing.error-tag:bad-attributeerror-type:rpc,protocol,applicationerror-severity:errorerror-info::nameoftheattributew/badvalue:nameoftheelementthatcontainstheattributewiththebadvalueDescription:Anattributevalueisnotcorrect;e.g.,wrongtype,outofrange,patternmismatch.error-tag:unknown-attributeerror-type:rpc,protocol,applicationerror-severity:errorerror-info::nameoftheunexpectedattribute:nameoftheelementthatcontainstheunexpectedattributeDescription:Anunexpectedattributeispresent.[在此处键入]RFC6241网络配置协议error-tag:missing-elementerror-type:protocol,applicationerror-severity:errorerror-info::nameofthemissingelementDescription:Anexpectedelementismissing.error-tag:bad-elementerror-type:protocol,applicationerror-severity:errorerror-info::nameoftheelementw/badvalueDescription:Anelementvalueisnotcorrect;e.g.,wrongtype,outofrange,patternmismatch.error-tag:unknown-elementerror-type:protocol,applicationerror-severity:errorerror-info::nameoftheunexpectedelementDescription:Anunexpectedelementispresent.error-tag:unknown-namespaceerror-type:protocol,applicationerror-severity:errorerror-info::nameoftheelementthatcontainstheunexpectednamespace:nameoftheunexpectednamespaceDescription:Anunexpectednamespaceispresent.error-tag:access-deniederror-type:protocol,applicationerror-severity:errorerror-info:noneDescription:Accesstotherequestedprotocoloperationordatamodelisdeniedbecauseauthorizationfailed.error-tag:lock-deniederror-type:protocolerror-severity:errorerror-info::sessionIDofsessionholdingtherequestedlock,orzerotoindicateanon-NETCONFentityholdsthelockDescription:Accesstotherequestedlockisdeniedbecausethelockiscurrentlyheldbyanotherentity.error-tag:resource-denied[在此处键入]RFC6241网络配置协议error-type:transport,rpc,protocol,applicationerror-severity:errorerror-info:noneDescription:Requestcouldnotbecompletedbecauseofinsufficientresources.error-tag:rollback-failederror-type:protocol,applicationerror-severity:errorerror-info:noneDescription:Requesttorollbacksomeconfigurationchange(viarollback-on-errororoperations)wasnotcompletedforsomereason.error-tag:data-existserror-type:applicationerror-severity:errorerror-info:noneDescription:Requestcouldnotbecompletedbecausetherelevantdatamodelcontentalreadyexists.Forexample,a"create"operationwasattemptedondatathatalreadyexists.error-tag:data-missingerror-type:applicationerror-severity:errorerror-info:noneDescription:Requestcouldnotbecompletedbecausetherelevantdatamodelcontentdoesnotexist.Forexample,a"delete"operationwasattemptedondatathatdoesnotexist.error-tag:operation-not-supportederror-type:protocol,applicationerror-severity:errorerror-info:noneDescription:Requestcouldnotbecompletedbecausetherequestedoperationisnotsupportedbythisimplementation.error-tag:operation-failederror-type:rpc,protocol,applicationerror-severity:errorerror-info:noneDescription:Requestcouldnotbecompletedbecausetherequestedoperationfailedforsomereasonnotcoveredbyanyothererrorcondition.[在此处键入]RFC6241网络配置协议error-tag:partial-operationerror-type:applicationerror-severity:errorerror-info::identifiesanelementinthedatamodelforwhichtherequestedoperationhasbeencompletedforthatnodeandallitschildnodes.Thiselementcanappearzeroormoretimesinthecontainer.:identifiesanelementinthedatamodelforwhichtherequestedoperationhasfailedforthatnodeandallitschildnodes.Thiselementcanappearzeroormoretimesinthecontainer.:identifiesanelementinthedatamodelforwhichtherequestedoperationwasnotattemptedforthatnodeandallitschildnodes.Thiselementcanappearzeroormoretimesinthecontainer.Description:Thiserror-tagisobsolete,andSHOULDNOTbesentbyserversconformingtothisdocument.Somepartoftherequestedoperationfailedorwasnotattemptedforsomereason.Fullcleanuphasnotbeenperformed(e.g.,rollbacknotsupported)bytheserver.Theerror-infocontainerisusedtoidentifywhichportionsoftheapplicationdatamodelcontentforwhichtherequestedoperationhassucceeded(),failed(),ornotbeenattempted().error-tag:malformed-messageerror-type:rpcerror-severity:errorerror-info:noneDescription:Amessagecouldnotbehandledbecauseitfailedtobeparsedcorrectly.Forexample,themessageisnotwell-formedXMLoritusesaninvalidcharacterset.Thiserror-tagisnewin:base:1.1andMUSTNOTbesenttooldclients.[在此处键入]RFC6241网络配置协议附录B:NETCONF消息层XML模式本章节是规范性的。文件"netconf.xsd"ThisschemadefinesthesyntaxfortheNETCONFMessageslayermessages’hello’,’rpc’,and’rpc-reply’. Thisimportaccessesthexml:attributegroupsforthexml:langasdeclaredontheerror-messageelement. [在此处键入]RFC6241网络配置协议 element--> element.--> [在此处键入]RFC6241网络配置协议[在此处键入]RFC6241网络配置协议 --> element--> elementmustbereturnedon.--> element--> element--> [在此处键入]RFC6241网络配置协议附录C:NETCONF操作的YANG模型本章节是规范性的。ietf-netconfYANG模型从RFC6021重定义引入。文件"ietf-netconf@2011-06-01.yang"moduleietf-netconf{//thenamespaceforNETCONFXMLdefinitionsisunchanged//fromRFC4741,whichthisdocumentreplacesnamespace"urn:ietf:params:xml:ns:netconf:base:1.0";prefixnc;importietf-inet-types{prefixinet;}organization"IETFNETCONF(NetworkConfiguration)WorkingGroup";contact"WGWeb: WGList:netconf@ietf.orgWGChair:BertWijnenbertietf@bwijnen.netWGChair:MehmetErsuemehmet.ersue@nsn.comEditor:MartinBjorklundmbj@tail-f.comEditor:JuergenSchoenwaelderj.schoenwaelder@jacobs-university.deEditor:AndyBierman";description"NETCONFProtocolDataTypesandProtocolOperations.Copyright(c)2011IETFTrustandthepersonsidentifiedasthedocumentauthors.Allrightsreserved.[在此处键入]RFC6241网络配置协议Redistributionanduseinsourceandbinaryforms,withorwithoutmodification,ispermittedpursuantto,andsubjecttothelicensetermscontainedin,theSimplifiedBSDLicensesetforthinSection4.coftheIETFTrust’sLegalProvisionsRelatingtoIETFDocuments(http://trustee.ietf.org/license-info).ThisversionofthisYANGmoduleispartofRFC6241;seetheRFCitselfforfulllegalnotices.";revision2011-06-01{description"Initialrevision";reference"RFC6241:NetworkConfigurationProtocol";}extensionget-filter-element-attributes{description"Ifthisextensionispresentwithinan’anyxml’statementnamed’filter’,whichmustbeconceptuallydefinedwithintheRPCinputsectionfortheandprotocoloperations,thenthefollowingunqualifiedXMLattributeissupportedwithintheelement,withinaorprotocoloperation:type:optionalattributewithallowedvaluestrings’subtree’and’xpath’.Ifmissing,thedefaultvalueis’subtree’.Ifthe’xpath’featureissupported,thenthefollowingunqualifiedXMLattributeisalsosupported:select:optionalattributecontainingastringrepresentinganXPathexpression.The’type’attributemustbeequalto’xpath’ifthisattributeispresent.";}//NETCONFcapabilitiesdefinedasfeaturesfeaturewritable-running{description"NETCONF:writable-runningcapability;Iftheserveradvertisesthe:writable-runningcapabilityforasession,thenthisfeaturemustalsobeenabledforthatsession.Otherwise,thisfeaturemustnotbeenabled.";reference"RFC6241,Section8.2";}[在此处键入]RFC6241网络配置协议featurecandidate{description"NETCONF:candidatecapability;Iftheserveradvertisesthe:candidatecapabilityforasession,thenthisfeaturemustalsobeenabledforthatsession.Otherwise,thisfeaturemustnotbeenabled.";reference"RFC6241,Section8.3";}featureconfirmed-commit{if-featurecandidate;description"NETCONF:confirmed-commit:1.1capability;Iftheserveradvertisesthe:confirmed-commit:1.1capabilityforasession,thenthisfeaturemustalsobeenabledforthatsession.Otherwise,thisfeaturemustnotbeenabled.";reference"RFC6241,Section8.4";}featurerollback-on-error{description"NETCONF:rollback-on-errorcapability;Iftheserveradvertisesthe:rollback-on-errorcapabilityforasession,thenthisfeaturemustalsobeenabledforthatsession.Otherwise,thisfeaturemustnotbeenabled.";reference"RFC6241,Section8.5";}featurevalidate{description"NETCONF:validate:1.1capability;Iftheserveradvertisesthe:validate:1.1capabilityforasession,thenthisfeaturemustalsobeenabledforthatsession.Otherwise,thisfeaturemustnotbeenabled.";reference"RFC6241,Section8.6";}featurestartup{description"NETCONF:startupcapability;Iftheserveradvertisesthe:startupcapabilityforasession,thenthisfeaturemustalsobeenabledforthatsession.Otherwise,thisfeaturemustnotbeenabled.";reference"RFC6241,Section8.7";}[在此处键入]RFC6241网络配置协议featureurl{description"NETCONF:urlcapability;Iftheserveradvertisesthe:urlcapabilityforasession,thenthisfeaturemustalsobeenabledforthatsession.Otherwise,thisfeaturemustnotbeenabled.";reference"RFC6241,Section8.8";}featurexpath{description"NETCONF:xpathcapability;Iftheserveradvertisesthe:xpathcapabilityforasession,thenthisfeaturemustalsobeenabledforthatsession.Otherwise,thisfeaturemustnotbeenabled.";reference"RFC6241,Section8.9";}//NETCONFSimpleTypestypedefsession-id-type{typeuint32{range"1..max";}description"NETCONFSessionId";}typedefsession-id-or-zero-type{typeuint32;description"NETCONFSessionIdorZerotoindicatenone";}typedeferror-tag-type{typeenumeration{enumin-use{description"Therequestrequiresaresourcethatalreadyisinuse.";}enuminvalid-value{description"Therequestspecifiesanunacceptablevalueforoneormoreparameters.";}enumtoo-big{description"Therequestorresponse(thatwouldbegenerated)is[在此处键入]RFC6241网络配置协议toolargefortheimplementationtohandle.";}enummissing-attribute{description"Anexpectedattributeismissing.";}enumbad-attribute{description"Anattributevalueisnotcorrect;e.g.,wrongtype,outofrange,patternmismatch.";}enumunknown-attribute{description"Anunexpectedattributeispresent.";}enummissing-element{description"Anexpectedelementismissing.";}enumbad-element{description"Anelementvalueisnotcorrect;e.g.,wrongtype,outofrange,patternmismatch.";}enumunknown-element{description"Anunexpectedelementispresent.";}enumunknown-namespace{description"Anunexpectednamespaceispresent.";}enumaccess-denied{description"Accesstotherequestedprotocoloperationordatamodelisdeniedbecauseauthorizationfailed.";}enumlock-denied{description"Accesstotherequestedlockisdeniedbecausethelockiscurrentlyheldbyanotherentity.";}enumresource-denied{description"Requestcouldnotbecompletedbecauseofinsufficientresources.";[在此处键入]RFC6241网络配置协议}enumrollback-failed{description"Requesttorollbacksomeconfigurationchange(viarollback-on-errororoperations)wasnotcompletedforsomereason.";}enumdata-exists{description"Requestcouldnotbecompletedbecausetherelevantdatamodelcontentalreadyexists.Forexample,a’create’operationwasattemptedondatathatalreadyexists.";}enumdata-missing{description"Requestcouldnotbecompletedbecausetherelevantdatamodelcontentdoesnotexist.Forexample,a’delete’operationwasattemptedondatathatdoesnotexist.";}enumoperation-not-supported{description"Requestcouldnotbecompletedbecausetherequestedoperationisnotsupportedbythisimplementation.";}enumoperation-failed{description"Requestcouldnotbecompletedbecausetherequestedoperationfailedforsomereasonnotcoveredbyanyothererrorcondition.";}enumpartial-operation{description"Thiserror-tagisobsolete,andSHOULDNOTbesentbyserversconformingtothisdocument.";}enummalformed-message{description"Amessagecouldnotbehandledbecauseitfailedtobeparsedcorrectly.Forexample,themessageisnotwell-formedXMLoritusesaninvalidcharacterset.";}}description"NETCONFErrorTag";reference"RFC6241,AppendixA";[在此处键入]RFC6241网络配置协议}typedeferror-severity-type{typeenumeration{enumerror{description"Errorseverity";}enumwarning{description"Warningseverity";}}description"NETCONFErrorSeverity";reference"RFC6241,Section4.3";}typedefedit-operation-type{typeenumeration{enummerge{description"Theconfigurationdataidentifiedbytheelementcontainingthisattributeismergedwiththeconfigurationatthecorrespondinglevelintheconfigurationdatastoreidentifiedbythetargetparameter.";}enumreplace{description"Theconfigurationdataidentifiedbytheelementcontainingthisattributereplacesanyrelatedconfigurationintheconfigurationdatastoreidentifiedbythetargetparameter.Ifnosuchconfigurationdataexistsintheconfigurationdatastore,itiscreated.Unlikeaoperation,whichreplacestheentiretargetconfiguration,onlytheconfigurationactuallypresentintheconfigparameterisaffected.";}enumcreate{description"Theconfigurationdataidentifiedbytheelementcontainingthisattributeisaddedtotheconfigurationifandonlyiftheconfigurationdatadoesnotalreadyexistintheconfigurationdatastore.Iftheconfigurationdataexists,anelementisreturnedwithanvalueof’data-exists’.";}enumdelete{[在此处键入]RFC6241网络配置协议description"Theconfigurationdataidentifiedbytheelementcontainingthisattributeisdeletedfromtheconfigurationifandonlyiftheconfigurationdatacurrentlyexistsintheconfigurationdatastore.Iftheconfigurationdatadoesnotexist,anelementisreturnedwithanvalueof’data-missing’.";}enumremove{description"Theconfigurationdataidentifiedbytheelementcontainingthisattributeisdeletedfromtheconfigurationiftheconfigurationdatacurrentlyexistsintheconfigurationdatastore.Iftheconfigurationdatadoesnotexist,the’remove’operationissilentlyignoredbytheserver.";}}default"merge";description"NETCONF’operation’attributevalues";reference"RFC6241,Section7.2";}//NETCONFStandardProtocolOperationsrpcget-config{description"Retrieveallorpartofaspecifiedconfiguration.";reference"RFC6241,Section7.1";input{containersource{description"Particularconfigurationtoretrieve.";choiceconfig-source{mandatorytrue;description"Theconfigurationtoretrieve.";leafcandidate{if-featurecandidate;typeempty;description"Thecandidateconfigurationistheconfigsource.";}leafrunning{typeempty;description[在此处键入]RFC6241网络配置协议"Therunningconfigurationistheconfigsource.";}leafstartup{if-featurestartup;typeempty;description"Thestartupconfigurationistheconfigsource.Thisisoptional-to-implementontheserverbecausenotallserverswillsupportfilteringforthisdatastore.";}}}anyxmlfilter{description"SubtreeorXPathfiltertouse.";nc:get-filter-element-attributes;}}output{anyxmldata{description"Copyofthesourcedatastoresubsetthatmatchedthefiltercriteria(ifany).Anemptydatacontainerindicatesthattherequestdidnotproduceanyresults.";}}}rpcedit-config{description"Theoperationloadsallorpartofaspecifiedconfigurationtothespecifiedtargetconfiguration.";reference"RFC6241,Section7.2";input{containertarget{description"Particularconfigurationtoedit.";choiceconfig-target{mandatorytrue;description"Theconfigurationtarget.";leafcandidate{if-featurecandidate;typeempty;description"Thecandidateconfigurationistheconfigtarget.";[在此处键入]RFC6241网络配置协议}leafrunning{if-featurewritable-running;typeempty;description"Therunningconfigurationistheconfigsource.";}}}leafdefault-operation{typeenumeration{enummerge{description"Thedefaultoperationismerge.";}enumreplace{description"Thedefaultoperationisreplace.";}enumnone{description"Thereisnodefaultoperation.";}}default"merge";description"Thedefaultoperationtouse.";}leaftest-option{if-featurevalidate;typeenumeration{enumtest-then-set{description"Theserverwilltestandthensetifnoerrors.";}enumset{description"Theserverwillsetwithoutatestfirst.";}enumtest-only{description"Theserverwillonlytestandnotset,eveniftherearenoerrors.";}}default"test-then-set";[在此处键入]RFC6241网络配置协议description"Thetestoptiontouse.";}leaferror-option{typeenumeration{enumstop-on-error{description"Theserverwillstoponerrors.";}enumcontinue-on-error{description"Theservermaycontinueonerrors.";}enumrollback-on-error{description"Theserverwillrollbackonerrors.Thisvaluecanonlybeusedifthe’rollback-on-error’featureissupported.";}}default"stop-on-error";description"Theerroroptiontouse.";}choiceedit-content{mandatorytrue;description"Thecontentfortheeditoperation.";anyxmlconfig{description"InlineConfigcontent.";}leafurl{if-featureurl;typeinet:uri;description"URL-basedconfigcontent.";}}}}rpccopy-config{description"Createorreplaceanentireconfigurationdatastorewiththecontentsofanothercompleteconfigurationdatastore.";reference"RFC6241,Section7.3";[在此处键入]RFC6241网络配置协议input{containertarget{description"Particularconfigurationtocopyto.";choiceconfig-target{mandatorytrue;description"Theconfigurationtargetofthecopyoperation.";leafcandidate{if-featurecandidate;typeempty;description"Thecandidateconfigurationistheconfigtarget.";}leafrunning{if-featurewritable-running;typeempty;description"Therunningconfigurationistheconfigtarget.Thisisoptional-to-implementontheserver.";}leafstartup{if-featurestartup;typeempty;description"Thestartupconfigurationistheconfigtarget.";}leafurl{if-featureurl;typeinet:uri;description"TheURL-basedconfigurationistheconfigtarget.";}}}containersource{description"Particularconfigurationtocopyfrom.";choiceconfig-source{mandatorytrue;description"Theconfigurationsourceforthecopyoperation.";leafcandidate{if-featurecandidate;typeempty;description[在此处键入]RFC6241网络配置协议"Thecandidateconfigurationistheconfigsource.";}leafrunning{typeempty;description"Therunningconfigurationistheconfigsource.";}leafstartup{if-featurestartup;typeempty;description"Thestartupconfigurationistheconfigsource.";}leafurl{if-featureurl;typeinet:uri;description"TheURL-basedconfigurationistheconfigsource.";}anyxmlconfig{description"InlineConfigcontent:element.Representsanentireconfigurationdatastore,notasubsetoftherunningdatastore.";}}}}}rpcdelete-config{description"Deleteaconfigurationdatastore.";reference"RFC6241,Section7.4";input{containertarget{description"Particularconfigurationtodelete.";choiceconfig-target{mandatorytrue;description"Theconfigurationtargettodelete.";leafstartup{if-featurestartup;typeempty;description"Thestartupconfigurationistheconfigtarget.";[在此处键入]RFC6241网络配置协议}leafurl{if-featureurl;typeinet:uri;description"TheURL-basedconfigurationistheconfigtarget.";}}}}}rpclock{description"Thelockoperationallowstheclienttolocktheconfigurationsystemofadevice.";reference"RFC6241,Section7.5";input{containertarget{description"Particularconfigurationtolock.";choiceconfig-target{mandatorytrue;description"Theconfigurationtargettolock.";leafcandidate{if-featurecandidate;typeempty;description"Thecandidateconfigurationistheconfigtarget.";}leafrunning{typeempty;description"Therunningconfigurationistheconfigtarget.";}leafstartup{if-featurestartup;typeempty;description"Thestartupconfigurationistheconfigtarget.";}}}}}rpcunlock{[在此处键入]RFC6241网络配置协议description"Theunlockoperationisusedtoreleaseaconfigurationlock,previouslyobtainedwiththe’lock’operation.";reference"RFC6241,Section7.6";input{containertarget{description"Particularconfigurationtounlock.";choiceconfig-target{mandatorytrue;description"Theconfigurationtargettounlock.";leafcandidate{if-featurecandidate;typeempty;description"Thecandidateconfigurationistheconfigtarget.";}leafrunning{typeempty;description"Therunningconfigurationistheconfigtarget.";}leafstartup{if-featurestartup;typeempty;description"Thestartupconfigurationistheconfigtarget.";}}}}}rpcget{description"Retrieverunningconfigurationanddevicestateinformation.";reference"RFC6241,Section7.7";input{anyxmlfilter{description"Thisparameterspecifiestheportionofthesystemconfigurationandstatedatatoretrieve.";nc:get-filter-element-attributes;}}output{[在此处键入]RFC6241网络配置协议anyxmldata{description"Copyoftherunningdatastoresubsetand/orstatedatathatmatchedthefiltercriteria(ifany).Anemptydatacontainerindicatesthattherequestdidnotproduceanyresults.";}}}rpcclose-session{description"RequestgracefulterminationofaNETCONFsession.";reference"RFC6241,Section7.8";}rpckill-session{description"ForcetheterminationofaNETCONFsession.";reference"RFC6241,Section7.9";input{leafsession-id{typesession-id-type;mandatorytrue;description"Particularsessiontokill.";}}}rpccommit{if-featurecandidate;description"Committhecandidateconfigurationasthedevice’snewcurrentconfiguration.";reference"RFC6241,Section8.3.4.1";input{leafconfirmed{if-featureconfirmed-commit;typeempty;description"Requestsaconfirmedcommit.";reference"RFC6241,Section8.3.4.1";}leafconfirm-timeout{if-featureconfirmed-commit;typeuint32{range"1..max";}[在此处键入]RFC6241网络配置协议units"seconds";default"600";//10minutesdescription"Thetimeoutintervalforaconfirmedcommit.";reference"RFC6241,Section8.3.4.1";}leafpersist{if-featureconfirmed-commit;typestring;description"Thisparameterisusedtomakeaconfirmedcommitpersistent.ApersistentconfirmedcommitisnotabortediftheNETCONFsessionterminates.Theonlywaytoabortapersistentconfirmedcommitistoletthetimerexpire,ortousetheoperation.Thevalueofthisparameterisatokenthatmustbegiveninthe’persist-id’parameteroforoperationsinordertoconfirmorcancelthepersistentconfirmedcommit.Thetokenshouldbearandomstring.";reference"RFC6241,Section8.3.4.1";}leafpersist-id{if-featureconfirmed-commit;typestring;description"Thisparameterisgiveninordertocommitapersistentconfirmedcommit.Thevaluemustbeequaltothevaluegiveninthe’persist’parametertotheoperation.Ifitdoesnotmatch,theoperationfailswithan’invalid-value’error.";reference"RFC6241,Section8.3.4.1";}}}rpcdiscard-changes{if-featurecandidate;description"Revertthecandidateconfigurationtothecurrentrunningconfiguration.";reference"RFC6241,Section8.3.4.2";}rpccancel-commit{if-featureconfirmed-commit;description"Thisoperationisusedtocancelanongoingconfirmedcommit.[在此处键入]RFC6241网络配置协议Iftheconfirmedcommitispersistent,theparameter’persist-id’mustbegiven,anditmustmatchthevalueofthe’persist’parameter.";reference"RFC6241,Section8.4.4.1";input{leafpersist-id{typestring;description"Thisparameterisgiveninordertocancelapersistentconfirmedcommit.Thevaluemustbeequaltothevaluegiveninthe’persist’parametertotheoperation.Ifitdoesnotmatch,theoperationfailswithan’invalid-value’error.";}}}rpcvalidate{if-featurevalidate;description"Validatesthecontentsofthespecifiedconfiguration.";reference"RFC6241,Section8.6.4.1";input{containersource{description"Particularconfigurationtovalidate.";choiceconfig-source{mandatorytrue;description"Theconfigurationsourcetovalidate.";leafcandidate{if-featurecandidate;typeempty;description"Thecandidateconfigurationistheconfigsource.";}leafrunning{typeempty;description"Therunningconfigurationistheconfigsource.";}leafstartup{if-featurestartup;typeempty;description"Thestartupconfigurationistheconfigsource.";}[在此处键入]RFC6241网络配置协议leafurl{if-featureurl;typeinet:uri;description"TheURL-basedconfigurationistheconfigsource.";}anyxmlconfig{description"InlineConfigcontent:element.Representsanentireconfigurationdatastore,notasubsetoftherunningdatastore.";}}}}}}附录D:能力模板本章节是非规范性的。本章节定义了用于定于协议能力集的模板。使用YANG编写的数据模型不需要定义协议能力,因为使用YANG会自动导致宣告数据模型和数据模型的任何可选部分,这在YANG里面称为特性(feature)。能力集模板是用于当YANG机制不够强大(比如处理参数化的特性)或者一个使用其他数模模型建模语言的场景。[在此处键入]RFC6241网络配置协议D.1.capability-name(模板)D.1.1.overiewD.1.2.DependenciesD.1.3.CapabilityIdentifier这个{name}能力标识符被如下能力字符串标识:{capabilityuri}D.1.4.NewOperationsD.1.4.1D.1.5.ModificationstoExistingOperationsD.1.5.1如果没有现有的能力被该能力锁修改,则此小节可以忽略。D.1.6.InteractionswithOtherCapabilities如果这个能力没有和其他能力有交互,此小节可以忽略。附录E:使用NETCONF配置多个设备本章节是非规范性的。[在此处键入]RFC6241网络配置协议E.1.在单个设备上的操作考虑针对单个设备执行配置更新所涉及的工作,在进行配置变化的过程中,应用需要构建信任关系,确保其配置变化被正确实施,并且这个配置变化没有影响到设备的操作。应用(以及应用的用户)应该对他们的修改并没有损坏网络充满信心。保护每个单独的设备包含一系列步骤:o获取配置锁o打点(备份)正在运行的配置o加载并验证传入的配置o改变运行配置o测试新配置o使配置变更永久生效o释放配置锁下边说明每个步骤的具体处理过程。E.1.1.获取配置锁为了防止多个源同时发起的更新操作,必须获取配置锁。如果多个源同时影响设备,则应用会在测试其配置变更和在更新失败的恢复场景,都会收到阻碍。获取一把短期锁,是一个防止其他参与方引入不相关变化的简单防御手段。可以通过操作获取锁。 如果支持:candidate能力,则candidate配置应该加锁。 [在此处键入]RFC6241网络配置协议 E.1.2.打点(备份)正在运行的配置在加载新的配置前,可以将running配置保存为本地文件,作为一个打点备份。如果更新失败,配置可以通过重载该文件得以恢复。打点备份文件可以通过完成。file://checkpoint.conf 恢复打点备份文件时,可以翻转和参数。E.1.3.加载并验证传入的配置如果支持:candidate能力,配置可以加载到设备中,而不影响正在运行的系统。 如果设备支持:validate:1.1能力,默认情况下,它将在将传入配置加载到candidate中时对其进行验证。为了避免验证,设置取值为"set"。完整的验证可以通过操作发起。 E.1.4.改变运行配置当传入的配置已经安全的加载到设备上,并且经过了验证,它就准备好影响正在运行的系统了(准备生效配置)。如果设备支持:candidate能力,使用操作将running配置更新为candidate配置。使用参数使得在设备连接失败时,自动会退到原始的配置。120 如果设备不支持candidate能力,则传入配置变化直接加载到运行系统中。 E.1.5.测试新配置至此,传入配置已经被集成进running配置,应用需要确认系统以按照配置运行,而没有其他副作用。为了确保这一点,应用需要对设备的操作状态进行测试。测试的性质由所做的修改确定,不在本文档讨论范围之内。这样的测试可能包括运行应用的系统到设备的可达性(通过ping),到其他网络的可达性的变化[在此处键入]RFC6241网络配置协议(比较设备的路由表),或者特定变化的检查(寻找刚添加的BGP对等体的操作证据)。E.1.6.使配置永久生效当配置变化已经就位,并且应用已经足够确认正确实施了对应的功能,则应用期望将配置变更永久生效。如果设备支持:startup能力,则当前配置保存到startup配置中,这一点可以通过将startup设置为的target的参数即可实现。 如果设备支持:candidate能力,并且已经发起一个confirmed操作,则confriming提交操作必须在超时前发起。 E.1.7.释放配置锁当完成配置更新后,必须释放配置锁,以允许其他应用可以访问配置。使用操作去释放配置锁。 如果支持:candidate能力,则候选配置锁应该被释放。 E.2.操作多个设备当配置变化要求更新多个设备时,需要注意提供所需要的事务(transaction)的语义。NETCONF协议包含了足够的原语,用以构建面向事务的操作。在多个设备间提供完整的事物语义代价很大,但是可以降低失败场景的窗口大小和数量。存在两类多设备操作。第一类允许多个设备中某一个设备失败,而不需要将所有设备的配置都回退到初始状态。这个失败的操作可以在随后的时间重试,或者简单的直接报告给用户。此类操作的一个实例是增加一个NTP服务器。对于这类操作,失败的避免和恢复聚焦于单个设备。这意味着恢复设备,报告故障以及安排重试计划。第二类操作更加完整,要求操作在所有设备上必须全部完成或者全部回退,网络必须转换到一个新的状态或者复位到初始状态。比如,一个VPN的变化也许要求更新多个设备。这类操作的另一个例子是增加一个服务等级定义,让网络处于仅部分设备使用了新定义的状态下,将来引用该定义时将导致失败。为了给出事物语义,上边用于单个设备的不受仍然适用,但是需要跨多个设备并行执行:必须在所有相关设备上获取目标配置锁,一直持有到所有设备更新、并永久生效了该配置变化;配置变化必须在多个设备上进行上传、验证;打点备份必须在每个设备上执行;然后运行配置可以被变更、被测试并持久化(永久生效)。如果这些操作任何一个时失败,则每个设备都必须恢复期打点备份配置;在配置在所有设备上完全实施后或者全部丢弃后,才能释放每个设备上的配置锁。附录F:相对RFC4741的变化本节列举了相对于RFC4741的主要变化的列表:o新增"malformed-message"的error-tago"operation"属性新增"remove"枚举值o废弃"partial-operation"这个error-tago操作新增和参数[在此处键入]RFC6241网络配置协议o更新基础协议URI,并且澄清对于一个特定会话,通过消息交换,选择并标识协议版本o增加一个YANG模型,以模型化操作,同时从XSD中删除操作层o澄清候选配置数据存储锁的行为o澄清了服务器对“operation”属性的“delete”枚举值的错误响应的要求o为子树过滤新增一个名称空间通配机制o为操作的新增一个"test-only"取值o新增操作o介绍了NETCONF用户名和传输协议的要求,以解释用户名的派生方式。[在此处键入]RFC6241网络配置协议作者地址:RobEnns(editor)JuniperNetworksEMail:rob.enns@gmail.comMartinBjorklund(editor)Tail-fSystemsEMail:mbj@tail-f.comJuergenSchoenwaelder(editor)JacobsUniversityEMail:j.schoenwaelder@jacobs-university.deAndyBierman(editor)BrocadeEMail:andy.bierman@brocade.com[在此处键入]',)