Netconf协议学习笔记

Netconf简介

网络配置协议NETCONF(Network Configuration Protocol)提供一套管理网络设备的机制,用户可以使用这套机制增加、修改、删除网络设备的配置,获取网络设备的配置和状态信息。通过NETCONF协议,网络设备可以提供规范的应用程序编程接口API(Application Programming Interface),应用程序可以直接使用这些API,向网络设备发送和获取配置。

Netconf协议:

NETCONF(Network Configuration Protocol)是基于可扩展标记语言XML(Extensible Markup Language)的网络配置和管理协议,使用简单的基于RPC(Remote Procedure Call)机制实现客户端和服务器之间通信。客户端可以是脚本或者网管上运行的一个应用程序。服务器是一个典型的网络设备。

NETCONF提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来远程管理和监控设备的方法。其优点如下:

  • NETCONF协议以XML格式定义消息,运用RPC机制修改配置信息,这样既能方便管理配置信息,又能满足来自不同制造商设备之间的互操作性。
  • 可减少由于人工配置错误引起的网络故障。
  • 可提高使用配置工具升级系统软件的效率。
  • 扩展性好,不同制造商设备可以定义自己的协议操作,以实现独特的管理功能。
  • NETCONF提供了认证、鉴权等安全机制,保证了消息传递的安全。

Netconf与SNMP比较:

特性 SNMP NETCONF
配置管理 SNMP在进行设备数据操作时,如果多个用户对同一个配置量进行操作,协议没有提供保护锁定机制。 NETCONF提供保护锁定机制,防止多用户操作产生冲突。
查询 SNMP能够对某个表的一条或多条记录进行操作,查询中需要多次交互才能够完成。 NETCONF针对整个系统的配置数据可直接进行操作,且定义了过滤功能。
扩展性 扩展性差。 扩展性好:协议模型采取分层定义,各层之间相互独立,当对协议中的某一层进行扩展时,能够最大限度不影响到其上层协议。协议采用了XML编码,使得协议在管理能力上和系统兼容性方面也具有一定的可扩展性。
安全性 以目前最新的SNMPv3为例,SNMPv3在安全上存在的主要问题是,SNMPv3全部自己定义,未有扩展的余地。 NETCONF利用现有的安全协议提供安全保证,并不与具体的安全协议绑定。在使用中,NETCONF要比SNMP更灵活。说明:NETCONF传输层首选推荐SSH协议,XML信息通过SSH协议承载。

Netconf协议框架;

NETCONF协议采用了分层结构。每层分别对协议的某一方面进行包装,并向上层提供相关服务。分层结构使每层只关注协议的一个方面,实现起来更简单,同时使各层之间的依赖、内部实现的变更对其他层的影响降到最低。

NETCONF协议在概念上可以划分为4层:

  • 安全传输(Secure Transport)层为客户端和服务器之间交互提供通讯路径。
  • 消息(Messages)(RPC) (Remote Procedure Call,远程调用) 层提供一种简单的不依赖传输协议层的,生成RPC请求和回应消息框架的机制。Client把RPC请求内容封装在一个元素内,发送给Server;Server把请求处理结果封装在一个元素内,回应给Client。
  • 操作(Operations)层定义一组基本的操作,作为RPC的调用方法,可以使用XML编码的参数调用这些方法。
  • 内容(Content)层由管理对象的数据模型定义,数据模型定义依赖NETCONF的实现情况。

协议分层

Netconf报文结构:

netconf报文

Netconf基本网络结构:

NETCONF基本网络架构的主要元素:

  • 客户端(Client)。主要作用如下:

    • 利用NETCONF协议对网络设备进行系统管理。
    • 向NETCONF Server发送请求,查询或修改一个或多个具体的参数值。
    • 接收NETCONF Server主动发送的告警和事件,以获知被管理设备的当前状态。
  • 服务器(Server)。主要用于维护被管理设备的信息数据并响应客户端的请求。

    • 服务器收到客户端的请求后会进行数据解析,然后给客户端返回响应。
    • 当设备发生故障或其他事件时,服务器利用Notification机制主动将设备的告警和事件通知给客户端,向客户端报告设备的当前状态变化。
  • 配置数据集(Datastores)

    NETCONF定义了一个或多个配置数据集的存在,并允许对它们进行配置操作。配置数据集被定义为使设备从其初始默认状态进入期望的操作状态所需的完整配置数据集合。

    运行的配置数据集保存网络设备上当前处于活动状态的完整配置。 在设备上只存在一个此类型的配置数据集,并且始终存在。NETCONF协议使用引用此数据库。

    基本模型中只存在配置数据集。 其他配置数据集可以由能力集定义,且只在宣称支持该能力集的设备上可用。例如:

    • 备用配置数据集。存放设备将要提交到的各项配置数据的集合。管理员可以在上进行操作,对的任何改变不会直接影响网络设备。可以通过指令将备用配置数据提交为设备运行数据。华为设备支持的备用配置数据集在不同会话间独立,不存在会话间配置数据共享,所以配置备用配置数据集时,不需要额外的加锁操作
    • 启动配置数据集。存放设备启动时所加载的配置数据,相当于已保存的配置文件

    NETCONF会话是Client与Server之间的逻辑连接,网络设备必须至少支持一个NETCONF会话。Client从运行的Server上获取的信息包括配置数据和状态数据。

  • Client从运行的Server上获取的信息包括配置数据和状态数据。

  • Client可以修改配置数据,并通过操作配置数据,使Server的状态迁移到用户期望的状态。
  • Client不能修改状态数据,状态数据主要是Server的运行状态和统计的相关信息。

Netconf建模语言:

  • Schema:

    Schema是为了描述XML文档而定义的一套规则。Schema文件中定义了设备所有管理对象,以及管理对象的层次关系、读写属性和约束条件。

    设备通过Schema文件向网管提供配置和管理设备的接口。Schema文件类似于SNMP的MIB文件。

  • YANG:

    YANG是专门为NETCONF协议设计的数据建模语言,用来为NETCONF协议设计可操作的配置数据、状态数据模型、远程调用(RPCs)模型和通知机制等。

    YANG数据模型定位为一个面向机器的模型接口,明确定义数据结构及其约束,可以更灵活、更完整的进行数据描述。

相关概念:

NETCONF Client和Server之间使用RPC机制进行通信。Client必须和Server成功建立一个安全的、面向连接的会话才能进行通信。Client向Server发送一个RPC请求,Server处理完用户请求后,给Client发送一个回应消息。Client的RPC请求和Server的回应消息全部使用XML编码。

NETCONF协议提供了定义capabilities语法语意规范,协议允许Client与Server交互各自支持的capabilities,Client只能发送Server支持的capabilities范围内的操作请求。

XML编码:

XML作为NETCONF协议的编码格式,用文本文件表示复杂的层次化数据,即支持使用传统的文本编译工具,也支持使用XML专用的编辑工具读取、保存和操作配置数据。

基于XML网络管理的主要思想是利用XML的强大数据表示能力,使用XML描述被管理数据和管理操作,使管理信息成为计算机可以理解的数据库,提高计算机对网络管理数据的处理能力,从而提高网络管理能力。

总而言之,基于XML的网络管理的主要优点:

  • 具有强大的数据表示能力。
  • 方便高效安全的进行大量数据传输。
  • 很好的适应网络配置管理的需求。

XML编码格式文件头为<?xml version=”1.0” encoding=”UTF-8”?>,其中:

  • <?:表示一条指令的开始。
  • xml:表示此文件是XML文件。
  • version:NETCONF协议版本号。”1.0”表示使用XML1.0标准版本。
  • encoding:字符集编码格式,当前仅支持UTF-8编码。
  • ?>:表示一条指令的结束。

RPC模式:

NETCONF协议使用RPC通信模式,采用XML编码的元素提供独立于传输层协议的请求和回应消息框架。一些基本的RPC元素如表所示。

元素 说明
元素用来封装Client发送给NETCONF Server端的请求。
元素用来封装请求的应答消息,NETCONF Server给每个操作回应一个使用元素封装的应答消息。
在处理请求过程中,如果发生任何错误,则在元素内只封装元素返回给Client。
在处理请求过程中,如果没有发生任何错误,则在元素内封装一个元素返回给Client。

能力集(Capabliity):

NETCONF能力集是补充基本NETCONF规范的一组功能。 该能力由统一资源标识符(URI)标识。

能力集扩展了设备的基本操作,描述了附加操作和操作中允许的内容。客户端可以发现服务器的功能,并使用由这些能力集定义的任何其他操作,参数和内容。

能力集定义可以命名一个或多个依赖的能力集。 为了支持一种能力集,服务器必须支持它所依赖的任何能力集。

Netconf鉴权机制:

NETCONF鉴权机制用于管理特定用户执行NETCONF操作和访问NETCONF资源权限。

NETCONF鉴权支持的内容如下:

  • 协议操作(Protocol Operation)鉴权:允许使用指定的NETCONF协议操作。

    例如:等操作。

  • 模块(Module)鉴权:允许访问指定的特性模块。

    例如:Telnet-client、L3VPN、OSPF、Fault-MGR、Device-MGR、ISIS等特性模块。

  • 数据节点(Data-node)鉴权:允许查询、修改指定的数据节点。

    例如:/ifm/interfaces/interface/ifAdminStatus/devm/globalPara/maxChassisNum等数据节点。

NETCONF鉴权机制用于管理特定用户执行NETCONF操作和访问NETCONF资源权限,使这些用户只能执行或访问NETCONF协议规定的操作和能力集中预配置好的子集。

Netconf会话和能力集

Netconf会话基本流程:

  1. 客户端触发NETCONF会话建立,完成SSH连接建立,并进行认证与授权。
  2. 客户端和服务器完成NETCONF会话建立和能力协商。
  3. 客户端发送一个或多个请求给服务器,进行RPC交互(鉴权)。例如:
    • 修改并提交配置。
    • 查询配置数据或状态。
    • 对设备进行维护操作。
  4. 客户端关闭NETCONF会话。
  5. SSH连接关闭。

能力集交互:

能力集扩展了设备的基本操作,描述了附加操作和操作中允许的内容。客户端可以发现服务器的功能,并使用由这些能力集定义的任何其他操作,参数和内容。

能力协商是在会话建立阶段,双方通过发送消息给对方来通告自己支持的能力。当NETCONF会话打开,每一端(包括Client和Server)必须发送一个包含自身能力列表的消息。双方至少要发送NETCONF基本能力”urn:ietf:params:netconf:base:1.0”或”urn:ietf:params:netconf:base:1.1”。除了基本功能,NETCONF协议还允许客户端发现服务器端支持的其它能力列表。

在交换过Hello消息后,Server等待Client发送请求。Server为每个请求回应

Netconf基本操作

get查询数据;

查询的是设备当前运行的状态数据,即只能从配置数据库中获取数据。所以,不需要使用source参数指定配置数据库。

操作成功,Server回复的元素中含有参数,中封装了获取的结果数据。否则在消息中返回

示例:

RPC请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
<rpc message-id="101"  xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get>
<filter type="subtree">
<ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
<interfaces>
<interface>
<ifName>10GE1/0/1</ifName>
</interface>
</interfaces>
</ifm>
</filter>
</get>
</rpc>

RPC应答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<ifm xmlns="http://www.huawei.com/netconf/vrp" format-version="1.0" content-version="1.0">
<interfaces>
<interface>
<ifIndex>5</ifIndex>
<ifName>10GE1/0/1</ifName>
<ifPhyType>MEth</ifPhyType>
<!-- additional <interface> elements appear here... -->
</interface>
</interfaces>
</ifm>
</data>
</rpc-reply>

get-config查询配置数据:

操作用来查询全部或部分指定配置数据。

  • source:正在查询的配置数据库名称,
  • filter:此参数用来标识要查询配置数据库的范围。如果此参数不存在,则返回设备上所有的配置。

示例:查询running中接口配置;

1
2
3
4
5
6
7
8
9
10
11
12
13
<rpc message-id="101"  xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
<filter type="subtree">
<ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
<interfaces>
<interface/>
</interfaces>
</ifm>
</filter>
</get-config>

区别在于:

  • 只能查询配置数据库的数据,可以查询中数据。
  • 可以查询配置数据和状态数据,只能查询配置数据。

edit-config编辑配置数据:

操作用来把全部或部分配置数据加载到指定的目标配置数据库()。设备对中的操作进行鉴权,鉴权通过后,执行相应的修改。

操作支持多种加载配置方式,例如:支持加载本地文件、远程文件,支持在线编辑。如果NETCONF服务器支持URL能力,可以使用标识本地配置文件的参数替代参数。

操作RPC报文中各参数含义如下:

  • :一组由数据模型定义的层次化的配置数据。

    中可能包含可选的“operation”属性,用来给配置数据指定操作类型。如果未携带“operation”属性,则默认为merge操作。Operation取值如下:

    • merge:在数据库中修改存在或不存在的目标数据,如果目标数据不存在则创建,如果目标数据存在则修改。这是默认操作。
    • create:当且仅当配置数据库中不存在待创建的配置数据时,才能成功添加到配置数据库。如果配置数据存在,则会返回,其中包含一个值“data-exists”。
    • delete:删除配置数据库中指定的配置数据记录。如果数据存在,则删除该数据,如果数据不存在,则返回,其中包含一个值“data-missing”。
  • target:待编辑的配置数据库。基于场景选择对应的数据库:

    • 立即生效模式,配置数据库为
    • 两阶段生效模式,配置数据库为,对该数据库操作后需执行操作提交配置,修改后的配置才能生效。
    • 试运行,配置数据库设置为
  • default-operation:为操作设置默认操作。

    default-operation参数是可选的,缺省值为“merge”,取值如下:

    • merge:参数中的配置数据与目标配置数据库中的配置合并。这是默认操作。
    • replace:使用参数中的配置数据,完全替换目标配置数据库中的配置。
    • none:除了执行operation属性指定的操作外,目标配置数据库中的配置数据不受中其他配置数据影响。如果参数中含有目标配置数据库中对应的数据层次上不存在的配置数据,则返回值为“data-missing”,这样可以避免在执行指定操作时,无意中创建了冗余的元素。比如执行删除指定子元素操作时,中包含该子元素的父层次结构,而目标数据库中不包含其父元素的配置,此时如果default-operation参数取值为非none的其他操作类型,则在删除该子元素的同时也会在目的数据库中创建其父元素的配置,如果default-operation参数取值为none,则只会删除该子元素,而不会创建其父元素的配置。
  • error-option:用于设置一个实例配置出错后,后续实例配置的处理方式,缺省值为stop-on-error,取值为

    • stop-on-error:出现错误后停止操作。
    • continue-on-error:出现错误后记录错误信息并继续执行,只要发生错误,NETCONF服务器会给客户端返回一个操作失败的消息。
    • rollback-on-error:出现错误后停止操作,并将配置回退到执行操作之前的状态。只有设备支持rollback-on-error能力才支持此操作。

示例:将运行配置数据库中接口名为10GE1/0/1的接口的ifDescr值修改为“huawei”。

RPC请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<rpc message-id="60" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<edit-config>
<target>
<running/>
</target>
<default-operation>merge</default-operation>
<error-option>rollback-on-error</error-option>
<config>
<ifm xmlns="http://www.huawei.com/netconf/vrp" content-version="1.0" format-version="1.0">
<interfaces>
<interface>
<ifName>10GE1/0/1</ifName>
<ifDescr>huawei</ifDescr>
</interface>
</interfaces>
</ifm>
</config>
</edit-config>
</rpc>

RPC应答:

1
2
3
<rpc-reply message-id="60" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" flow-id="104">
<ok/>
</rpc-reply>

copy-config拷贝操作:

源配置数据库替换目标配置数据库。如果目标配置数据库没有创建,则直接创建配置数据库,否则用源配置数据库直接覆盖目标配置数据库。

拷贝配置数据到,文件格式必须是.cfg、.zip或者*.dat,不支持以XML格式保存。

示例: 将数据库中的配置保存至数据库。

RPC请求:

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?> 
<rpc message-id="596" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<copy-config>
<target>
<startup/>
</target>
<source>
<running/>
</source>
</copy-config>
</rpc>

RPC应答:

1
2
3
<rpc-reply message-id="596" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> 
<ok/>
</rpc-reply>

delete-config删除配置数据:

用来删除一个配置数据库,但不能删除配置数据库。

删除数据库示例。

RPC请求:

1
2
3
4
5
6
7
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> 
<delete-config>
<target>
<startup/>
</target>
</delete-config>
</rpc>

RPC应答:

1
2
3
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> 
<ok/>
</rpc-reply>

lock锁定配置数据库:

用来锁定设备的配置数据库,独占配置数据库的修改权。这种锁定允许用户在配置时,不会受到如NETCONF mannager、SNMP或者CLI脚本的配置影响,防止产生冲突。

如果配置数据库被合法用户锁定,则返回的reply报文中将显示lock-denied,并且中将显示锁定者的

锁定配置数据库成功示例。

RPC请求:

1
2
3
4
5
6
7
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lock>
<target>
<running/>
</target>
</lock>
</rpc>

RPC应答:

1
2
3
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>

锁定配置数据库失败示例。

RPC请求

1
2
3
4
5
6
7
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lock>
<target>
<running/>
</target>
</lock>
</rpc>

RPC应答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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-app-tag>43</error-app-tag>
<error-message>The configuration is locked by other user. [Session ID = 629] </error-message>
<error-info>
<session-id>629</session-id>
<error-paras>
<error-para>629</error-para>
</error-paras>
</error-info>
</rpc-error>
</rpc-reply>

unlock取消锁定配置数据库:

用来取消用户自己之前执行的操作,不能取消其他用户的操作。

取消锁定数据库操作示例:

RPC请求

1
2
3
4
5
6
7
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<unlock>
<target>
<running/>
</target>
</unlock>
</rpc>

RPC应答

1
2
3
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>

close-session关闭netconf会话:

用来正常关闭当前NETCONF会话。

当NETCONF Server收到请求时,它将关闭当前的NETCONF会话。服务器将释放与该会话相关的所有锁和资源。在收到请求后,NETCONF Server将忽略这个会话的所有请求消息。

关闭当前NETCONF会话示例:

  • RPC请求
1
2
3
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<close-session/>
</rpc>
  • RPC应答
1
2
3
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>

kill-session强制关闭netconf会话:

用来强制关闭另一个NETCONF会话,只有管理员用户才有权限执行操作。

当NETCONF Server收到请求时,它将中止该会话正在进行的所有操作,释放与该会话相关联的任何锁和资源,并关闭该会话。

如果NETCONF服务器在处理操作时收到请求,它必须将配置恢复到发出确认提交之前的状态。

强制关闭session-id为4的NETCONF会话示例:

  • RPC请求
1
2
3
4
5
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<kill-session>
<session-id>4</session-id>
</kill-session>
</rpc>

Netconf能力集

Netconf标准能力:

Writable-running能力:

此能力指明设备支持对配置数据库的写能力,即设备支持对运行的配置进行操作。

1
<capability>urn:ietf:params:netconf:capability:writable-running:1.0</capability>

Candidate Configureation能力:

此能力指明设备支持备用配置数据库。

配置数据库中存放设备一套完整的配置数据。操作这些配置数据时,不会影响设备当前运行的配置数据。

用户为了得到期望的配置数据,可以执行删除和修改操作。任意时刻可以执行如下操作:

  • :将配置数据库中的所有数据全部提交,转化为设备当前运行的配置数据。

    如果操作失败,配置数据库中的内容保持不变。

  • :放弃执行配置数据库中还未提交的配置数据,使数据库中的配置数据恢复到与当前配置数据库相同数据。

设备会为每个NETCONF会话单独创建一个配置数据库,不同的NETCONF会话的之间,配置数据相互独立。

能力标识

1
<capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>

Confirmed Commit能力:

此能力指明设备支持协议操作携带参数

  • :将数据库中的配置数据提交,转化为设备当前运行的配置数据,即数据库中的配置。
  • 操作确认超时时间,单位是秒,缺省值是600秒。设备执行操作后,在确认超时时间内,如果没有执行确认操作,则对数据库中的配置进行回滚,配置数据恢复到执行操作之前的状态,并放弃数据库中的编辑数据。

此能力仅在支持Candidate Configuration能力时有效,主要应用于对业务进行试运行、验证的场景中。

能力标识

1
<capability>urn:ietf:params:netconf:capability:confirmed-commit:1.0</capability>

提交当前的配置,并设置操作确认超时时间为120s示例。

RPC请求:

1
2
3
4
5
6
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<commit>
<confirmed/>
<confirm-timeout>120</confirm-timeout>
</commit>
</rp

Rollback on Error能力:

此能力表明设备具备错误回滚能力。即支持在操作的参数中携带“rollback-on-error”字段,如果在执行操作时出现错误并产生错误元素,则服务器将停止处理操作,并将配置恢复至执行操作之前的状态。

此能力仅在设备支持Candidate Configuration能力时生效。

能力标识

1
<capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability>

示例RPC请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<edit-config>
<target>
<running/>
</target>
<error-option>rollback-on-error</error-option>
<config>
<ifm xmlns="urn:huawei:yang:huawei-ifm">
<interfaces>
<interface>
<name>GigabitEthernet1/0/0</name>
<mtu>1000</mtu>
</interface>
</interfaces>
</ifm>
</config>
</edit-config>
</rpc>

Distinct Startup能力:

此能力指明设备具备独立启动的能力,即设备能够区分运行数据库和启动数据库

NETCONF服务器需要对运行的配置进行独立维护,并在设备重新启动后能够恢复运行的配置。对数据库的配置操作不会自动同步到数据库,必须执行一个从的操作(例如操作),才能把数据库中的数据更新到数据库中。

能力标识

1
<capability>urn:ietf:params:netconf:capability:startup:1.0</capability>

执行操作,将数据库的配置拷贝到数据库示例。

RPC请求

1
2
3
4
5
6
7
8
9
10
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<copy-config>
<source>
<running/>
</source>
<target>
<startup/>
</target>
</copy-config>
</rpc>

Notification能力:

该能力指明设备可以通过NETCONF协议的Notification能力向客户端上报告警和事件,以便客户端及时感知设备配置等的变更。用户通过执行操作向设备订阅告警和事件,若设备回复的元素中含有元素,则表示操作成功,设备会主动将产生的告警和事件通过NETCONF上报客户端。

能力标识

1
<capability>urn:ietf:params:netconf:capability:notification:1.0</capability>

扩展能力集:

Action能力:

此能力指明设备具备处理操作能力。用户通过操作请求设备执行某个维护命令,例如:复位单板,激活补丁等。

操作即维护操作,修改、查询以外的命令

能力标识

1
<capability>http://www.huawei.com/netconf/capability/action/1.0</capability>

Execute CLI能力:

此能力指明设备在处理请求过程中,能与发送端进行交互。

能力标识

1
<capability>http://www.huawei.com/netconf/capability/execute-cli/1.0</capability>

Client端通过操作来执行CLI命令。一条RPC请求最多可包含60条命令,最大字符串长度为512字节。若执行操作过程中出错,将无法执行RPC请求中的其他命令。

客户端通过操作请求设备执行display saved-configuration time命令示例。

RPC请求

1
2
3
4
5
6
7
8
<rpc message-id="11" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<execute-cli xmlns="http://www.huawei.com/netconf/capability/base/1.0">
<cmd>
<id>1</id>
<cmdline>display saved-configuration time</cmdline>
</cmd>
</execute-cli>
</rpc>

Discard Commit能力:

此能力用来取消或终止正在执行的confirmed-commit操作。例如,在commit操作确认超时之前或正在执行的操作过程中,执行discard-commit操作可以放弃当前所有的二阶段缓存数据,即放弃数据库中的数据。

能力标识

1
<capability>http://www.huawei.com/netconf/capability/discard-commit/1.0</capability>

放弃当前正在执行的commit操作示例。

1
2
3
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<discard-commit xmlns="http://www.huawei.com/netconf/capability/discard-commit/1.0"/>
</rpc>

Netconf编程实现

Python—ncclient实现:

python网络自动化netconf配置模块ncclient学习笔记 )

https://github.com/ncclient/ncclient

Go–go-netconf实现:

netconf-go语言-go-netconf包学习笔记:

https://github.com/Juniper/go-netconf


参考文档:

http://www.h3c.com/cn/d_201709/1031825_30005_0.htm#_Toc492405216

https://support.huawei.com/hedex/hdx.do?lib=EDOC110010122531180BDB&docid=EDOC1100101225&lang=zh&v=02&tocLib=EDOC110010122531180BDB&tocV=02&id=ZH-CN_CONCEPT_0141126376&tocURL=resources%252fdc%252fdc%255fvrp%255flog%255fnetconf%252ehtml&p=t&fe=1&ui=3&keyword=netconf

https://tools.ietf.org/html/rfc6241


坚持原创技术分享,您的支持将鼓励我继续创作!