网络——netconf文字类

NETCONF( Network Configuration Protocol,网络配置协议)

是一种基于 XML 的网络管理协议,它提供了一种可编程的、 对网络设备进行配置和管理的方法。用户可以通过该协议设置属性、获取属性值、获取统计信息等。这使得它在第三方软件的开发上非常便利,很容易开发出在混合不同厂商、不同设备的环境下的特殊定制的网管软件。 

NETCONF基本网络架构:

我们这里的服务器是指的交换机或想获取数据的对象,而客户端是用来收取这些数据的设备。

分层结构:

  1. 和数据报类似,需要在一个安全的协议中,传输内容。
  2. 是由下至上的形式进行嵌套。
NETCONF分层 XML 分层 说明
内容层 配置数据、状态数据、
统计信息等
被管理对象的集合,可以是配置数据、状态数据、统计信息等NETCONF协议。
操作层 <get>,<get-config>,
<edit-config>…
在RPC中应用的基本的原语操作集,这些操作组成NETCONF的基本能力NETCONF全面地定义了对被管理设备的各种基础操作,设备支持的操作。
RPC层 <rpc>,<rpc-reply>

为RPC模块的编码提供了简单的、传输协议无关的机制。通过使用<rpc>和<rpc-reply>元素分别对NETCONF请求和响应数据(即操作层和内容层的内容)进行封装。

自己解释:用于以什么样的标准来读取里面的内容。

通信协议层 非FIPS模式下:
Console/Telnet/SSH
/HTTP/HTTPS/TLS
FIPS
模式下:
Console/SSH/HTTP
S/TLS

为NETCONF提供面向连接的、可靠的、顺序的数据链路。
非
FIPS模式下:
• NETCONF 支持 Telnet、 SSH 和 Console 等 CLI 登录方式/协议,即
NETCONF over SSH、 NETCONF over Telnet 和 NETCONF over
Console
• NETCONF 支持 HTTP 和 HTTPS 协议,即 NETCONF over HTTP
和 NETCONF over HTTPS
• NETCONF 支持封装成 SOAP( Simple Object Access Protocol,简
单对象访问协议)报文后通过
HTTP 或 HTTPS 协议传输,即
NETCONF over SOAP over HTTP 和 NETCONF over SOAP overHTTPS

FIPS模式下:
• NETCONF 支持 SSH 和 Console 等 CLI 方式/协议,即 NETCONF
over SSH
和 NETCONF over Console
• NETCONF 支持 HTTPS 登录协议,即 NETCONF over HTTPS
• NETCONF 支持封装成 SOAP 报文后通过 HTTPS 协议传输,即
NETCONF over SOAP over HTTPS

 

操作系列

操作名称

说明

获取业务数据

get

获取设备数据

get-bulk

批量获取设备数据

get-config

获取设备配置数据

get-bulk-config

批量获取设备配置数据

配置动作

edit-config

修改系统配置

非配置动作

action

修改、获取运行统计信息之类的动作

事件相关

get/filter/netconf

获取系统支持的事件流

create-subscription

订阅事件

cancel-subscription

取消订阅事件

会话管理

close-session

关闭当前会话

kill-session

关闭非当前会话

get-sessions

获取已经建立的会话

lock

锁定配置数据库

unlock

解锁配置数据库

执行非交互命令行命令

CLI

作为NETCONF的补充,执行NETCONF尚未提供的命令

配置管理

rollback

配置回滚

save

配置保存

load

配置加载

save-point

提供配置回滚点功能

请求验证

validate

NETCONF请求的XML语法验证

YANG操作

get/filter/netconf-state/capabilities

获取设备能力集

get/filter/netconf-state/datastores

获取设备中的数据库

get/filter/netconf-state/schemas

获取设备中的YANG文件名称列表

get/filter/netconf-state/sessions

获取设备中的会话信息

get/filter/netconf-state/statistics

获取NETCONF的统计信息

get-schema

获取YANG文件的内容

预配置

config-provisioned

开启预配置功能

 

操作

说明

XML格式样例

get

获取数据,包括运行状态数据和配置数据

获取Syslog模块的全部数据的XML请求如下:

<rpc message-id ="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="http://www.h3c.com/netconf/base:1.0">

  <get>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0">

        <Syslog>

        </Syslog>

      </top>

    </filter>

  </get>

</rpc>

get-config

获取配置数据,和get不同,它只返回非缺省的配置数据。如果未配置数据,则返回一个空的<data>

获取接口表内所有配置的XML请求如下:

<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="http://www.h3c.com/netconf/base:1.0">

  <get-config>

    <source>

      <running/>

    </source>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        <Ifmgr>

           <Interfaces>

              <Interface/>

            </Interfaces>

        </Ifmgr>

      </top>

    </filter>

  </get-config>

</rpc>

get-bulk

从指定索引的下一条开始批量获取后续N条数据(索引行数据不返回),包括运行状态数据和配置数据。用户通过index属性指定索引,通过count属性指定N。如未指定索引,则以第一条为索引;如未指定N,或者数据表中符合条件的数据记录不足N条,则返回表中所有剩下的数据条目

get操作会返回所有符合条件的数据,这在某些情况下会导致效率问题。get-bulk允许用户从固定数据项开始,向后获取指定条目的数据记录

取全部接口的数据的xml请求如下:

<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c ="http://www.h3c.com/netconf/base:1.0">

  <get-bulk>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/data:1.0">

        <Ifmgr>

          <Interfaces h3c:count="5">

            <Interface/>

          </Interfaces>

        </Ifmgr>

      </top>

    </filter>

  </get-bulk>

</rpc>

get-bulk-config

从指定索引的下一条批量获取配置数据。和get-config类似,只返回非默认配置;其他约束类似get-bulk

获取全部接口配置信息的xml请求如下:

<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

  <get-bulk-config>

    <source>

      <running/>

    </source>

    <filter type="subtree">

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        <Ifmgr>

        </Ifmgr>

      </top>

    </filter>

  </get-bulk-config>

</rpc>

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" xmlns:h3c="http://www.h3c.com/netconf/base:1.0" xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">

  <edit-config>

    <target>

      <running/>

    </target> 

    <config>

      <top xmlns="http://www.h3c.com/netconf/config:1.0" xc:operation="merge">

        <VLAN>

          <HybridInterfaces>

            <Interface>

              <IfIndex>262</IfIndex>

              <UntaggedVlanList  h3c: incremental="true">1-10</UntaggedVlanList>

               </Interface>

          </HybridInterfaces>

        </VLAN>

      </top>

    </config>

  </edit-config>

</rpc>

edit-config: merge

在当前运行配置的基础上直接运行指定配置

merge操作必须指定具体的操作对象(行):

·     如果指定的对象存在,则直接配置该对象

·     如果指定的对象不存在,但允许创建,则先创建再配置该对象

·     如果指定的对象不存在且不允许创建,则返回merge失败

将BufferSize设置为120的xml请求如下:

<rpc message-id ="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"  xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">

  <edit-config>

    <target>

      <running/>

    </target>

    <config>

      <top xmlns="http://www.h3c.com/netconf/config:1.0" xc:operation="merge">

        <Syslog>

           <LogBuffer>

             <BufferSize>120</BufferSize>

          </LogBuffer>

        </Syslog>

      </top>

    </config>

  </edit-config>

</rpc>

edit-config: create

创建指定对象。create操作必须指定配置对象。create操作的XML数据格式和merge类似,只是operation属性需要指定为“create”

·     如果当前配置表支持创建对象,且当前对象不存在,则先创建配置对象,再创建指定的配置

·     如果配置对象下对应的配置项已经存在,则返回data-exist错误

同上,把merge修改为create即可

edit-config: replace

·     如果指定的对象存在,则替换指定对象的配置为当前配置

·     如果指定的对象不存在,但允许创建,则先创建再配置该对象为当前配置

·     如果指定对象不存在且不允许创建,则不进行replace操作,返回invalid-value错误,提示用户配置对象不存在

同上,把merge修改为replace即可

edit-config: remove

删除指定配置

·     当指定的删除对象中只有表索引时,则删除此配置指定对象的所有配置,同时删除指定对象

·     当指定的删除对象中不仅仅有表索引还存在配置项时,则删除此对象下面的指定配置

·     如果系统中指定对象不存在,或者XML消息未指定对象,则直接返回成功

同上,把merge修改为remove即可

edit-config: delete

删除指定配置

·     当指定的删除对象中只有表索引时,则删除此配置指定对象的所有配置,同时删除指定对象

·     当指定的删除对象中不仅仅有表索引还存在配置项时,则删除此对象下面的指定配置

·     如果系统中指定对象不存在,则直接返回不存在的错误消息

同上,把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" xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">

  <edit-config>

    <target>

      <running/>

    </target>

    <default-operation>none</default-operation>

    <config>

      <top xmlns="http://www.h3c.com/netconf/config:1.0">

        <Ifmgr>

          <Interfaces>

            <Interface>

              <IfIndex>262</IfIndex>

              <Description>222222</Description>

            </Interface>

          </Interfaces>

        </Ifmgr>

      </top>

    </config>

  </edit-config>

</rpc>

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" xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">

  <edit-config>

    <target>

      <running/>

    </target>

    <error-option>continue-on-error</error-option>

    <config>

      <top xmlns="http://www.h3c.com/netconf/config:1.0" xc:operation="merge">

        <Ifmgr>

          <Interfaces>

            <Interface>

              <IfIndex>262</IfIndex>

              <Description>222</Description>

                <ConfigSpeed>1024</ConfigSpeed>

                <ConfigDuplex>1</ConfigDuplex>

            </Interface>

            <Interface>

              <IfIndex>263</IfIndex>

              <Description>333</Description>

                <ConfigSpeed>1024</ConfigSpeed>

                <ConfigDuplex>1</ConfigDuplex>

            </Interface>

          </Interfaces>

        </Ifmgr>

      </top>

    </config>

  </edit-config>

</rpc>

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" xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">

  <edit-config>

    <target>

      <running/>

    </target> 

    <test-option>test-only</test-option>

    <config>

      <top xmlns="http://www.h3c.com/netconf/config:1.0" xc:operation="merge">

        <Ifmgr>

          <Interfaces>

            <Interface>

              <IfIndex>262</IfIndex>

              <Description>222</Description>

                <ConfigSpeed>2</ConfigSpeed>

                <ConfigDuplex>1</ConfigDuplex>

               </Interface>

          </Interfaces>

        </Ifmgr>

      </top>

    </config>

  </edit-config>

</rpc>

action

下发非配置数据的设置动作,比如,reset操作

清除全部接口的统计信息,XML请求如下:

<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

  <action>

    <top xmlns="http://www.h3c.com/netconf/action:1.0">

      <Ifmgr>

        <ClearAllIfStatistics>

          <Clear>

          </Clear>

        </ClearAllIfStatistics>

      </Ifmgr>

    </top>

  </action>

</rpc>

lock

锁保护的是配置数据,即edit-config中可以指定的那些模块的配置数据,其他操作不受锁的限制

NETCONF锁仅仅保护NETCONF 会话,不保护SNMP等其他请求下发的配置

禁止NETCONF会话修改设备的当前配置,XML请求如下:

<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

 <lock>

    <target>

        <running/>

    </target>

</lock>

</rpc>

unlock

取消锁保护

当会话结束时锁也会被自动释放

取消锁保护,允许NETCONF会话修改设备的当前配置:

<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<unlock>

    <target>

        <running/>

    </target>

</unlock>

</rpc>

get-

sessions

获取当前系统中所有NETCONF会话的信息(不能指定sessions-ID)

获取当前系统中所有NETCONF会话的信息:

<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<get-sessions/>

</rpc>

close-

session

关闭当前NETCONF会话,并释放锁和这个session用到的内部资源(如内存等),退出XML视图

关闭当前NETCONF会话,并释放锁和这个session用到的内部资源(如内存等),退出XML视图

<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

<close-session/>

</rpc>

kill-

session

关闭其他NETCONF会话,不支持关闭用户自己的NETCONF会话

关闭session-id为1的NETCONF会话:

<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

  <kill-session>

    <session-id>1</session-id>

  </kill-session>

</rpc>

CLI

执行命令行的命令。请求消息将命令行语句封装在<CLI>标签中,命令行输出信息被封装在<CLI>标签中返回

CLI支持Configuration和Execution方式执行命令行:

·     Execution:在用户视图下执行命令行

·     Configuration:在系统视图下执行命令行。使用该方式时需要指定exec-use-channel的属性:

¡     false:不使用channel方式执行命令行

¡     true:使用临时channel执行命令行,执行完成后,自动关闭该channel

¡     persist:使用保留channel执行命令行。使用该方式时,则需要执行Open-channel操作打开当前对话的channel;使用完成后,执行Close-channel关闭Channel。如果未执行Open-channel操作,则系统将自动打开channel;如果未执行关闭保留channel操作,再次使用保留channel时,系统在上次最后执行的命令行所在视图再次执行命令行

·     对于其他视图下命令,则需要在Configuration下先指定进子视图的命令,再指定配置命令

一个NETCONF会话只能打开一个保留channel,可以打开多个临时channel

不支持执行交互式命令

使用channel方式执行命令行时,不支持执行quit命令退出用户视图

在系统视图下不使用channel方式执行telnet server enable命令:

<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

  <CLI>

     <Configuration exec-use-channel="false">telnet server enable</Configuration>

  </CLI>

</rpc>

save

保存系统运行配置。save操作可以使用子元素<file>来指定保存的配置文件名称。当save操作中不存在子元素<file>列时,则设备会自动将当前运行配置保存到主用下次启动配置文件中。OverWrite属性用来判断当指定的配置文件名存在时,当前配置是否覆盖原配置文件并保存成功。Binary-only属性用来只保存当前使用的二进制配置文件

将设备当前配置保存到文件test.cfg中:

<rpc message-id="100"

xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

  <save OverWrite="false" Binary-only="true">

    <file>test.cfg</file>

  </save>

</rpc>

load

配置加载。<load>操作执行后,指定文件中的配置会被合并到设备的当前配置中

将文件a1.cfg中的配置合并到设备的当前配置中:

<rpc message-id="100"

xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

  <load>

    <file>a1.cfg</file>

  </load>

</rpc>

rollback

配置回滚。<rollback>操作必须使用子元素<file>来指定需要回滚的配置文件名称<rollback>操作执行后,当前系统运行配置会被完全替换为指定文件中所描述的配置

将设备当前配置回退到文件1A.cfg中配置的状态:

<rpc message-id="100"

xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">

  <rollback>

    <file>1A.cfg</file>

  </rollback>

</rpc>

 

posted @ 2023-08-02 10:13  新兵蛋Z  阅读(422)  评论(0)    收藏  举报