08-NETCONF配置
本章節下載: 08-NETCONF配置 (569.83 KB)
設備運行於FIPS模式時,本特性部分配置相對於非FIPS模式有所變化,具體差異請見本文相關描述。有關FIPS模式的詳細介紹請參見“安全配置指導”中的“FIPS”。
NETCONF(Network Configuration Protocol,網絡配置協議)是一種基於XML的網絡管理協議,它提供了一種可編程的、對網絡設備進行配置和管理的方法。用戶可以通過該協議設置參數、獲取參數值、獲取統計信息等。
NETCONF報文使用XML格式,具有強大的過濾能力,而且每一個數據項都有一個固定的元素名稱和位置,這使得同一廠商的不同設備具有相同的訪問方式和結果呈現方式,不同廠商之間的設備也可以經過映射XML得到相同的效果,這使得它在第三方軟件的開發上非常便利,很容易開發出在混合不同廠商、不同設備的環境下的特殊定製的網管軟件。在這樣的網管軟件的協助下,使用NETCONF功能會使網絡設備的配置管理工作,變得更簡單更高效。
NETCONF協議采用了分層結構,分成四層:內容層、操作層、RPC(Remote Procedure Call,遠程調用)層和通信協議層。
表1-1 XML分層與NETCONF分層模型對應關係
NETCONF分層 |
XML分層 |
說明 |
Content |
配置數據、狀態數據、統計信息等 |
內容層表示的是被管理對象的集合,可以是配置數據、狀態數據、統計信息等。NETCONF協議具體可讀寫的數據請參見《NETCONF XML API 手冊》 |
Operations |
<get>,<get-config>,<edit-config>… |
操作層定義了一係列在RPC中應用的基本的原語操作集,這些操作將組成NETCONF的基本能力。NETCONF全麵地定義了對被管理設備的各種基礎操作 設備支持的操作請參見“2.1 附錄 A Comware V7中支持的NETCONF操作類型” |
RPC |
<rpc>,<rpc-reply> |
RPC層為RPC模塊的編碼提供了一個簡單的、傳輸協議無關的機製。通過使用<rpc>和<rpc-reply>元素分別對NETCONF請求和響應數據(即操作層和內容層的內容)進行封裝 |
Transport Protocol |
非FIPS模式下:Console/Telnet/SSH/HTTP/HTTPS/TLS FIPS模式下: Console/SSH/HTTPS/TLS |
非FIPS模式下: 通信協議層為NETCONF提供麵向連接的、可靠的、順序的數據鏈路。NETCONF支持Telnet、SSH和Console等CLI登錄方式/協議,即NETCONF over SSH、NETCONF over Telnet和NETCONF over Console NETCONF支持封裝成SOAP(Simple Object Access Protocol,簡單對象訪問協議)報文後通過HTTP、HTTPS協議傳輸,即NETCONF over SOAP over HTTP和NETCONF over SOAP over HTTPS FIPS模式下: 通信協議層為NETCONF提供麵向連接的、可靠的、順序的數據鏈路。NETCONF支持SSH和Console等CLI登錄方式/協議,即NETCONF over SSH和NETCONF over Console NETCONF還支持封裝成SOAP報文後通過HTTPS協議傳輸,即NETCONF over SOAP over HTTPS |
NETCONF命令必須符合XML語言的基本格式。
NETCONF和NETCONF over SOAP報文格式請遵循RFC 4741。
NETCONF操作以及可操作的數據項,請參見《NETCONF XML API手冊》。NETCONF報文的數據合法性都將經過校驗才會下發,如果校驗失敗則會向客戶端報錯。其中,數據合法性校驗通過XML Schema的方式完成。
如下為一個NETCONF報文示例,用於獲取設備上所有接口的所有參數:
<?xml version="1.0" encoding="utf-8"?>
<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-bulk>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface/>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get-bulk>
</rpc>
NETCONF over SOAP之後,NETCONF報文會放在SOAP報文的BODY元素裏,這些報文除了需要遵循純NETCONF報文的規則外,還需要遵循以下規則:
· SOAP消息必須用XML來編碼。
· SOAP消息必須使用SOAP Envelope命名空間。
· SOAP消息必須使用SOAP Encoding命名空間。
· SOAP消息不能包含DTD(Document Type Definition,文件類型定義)引用。
· SOAP消息不能包含XML處理指令。
如下為一個NETCONF over SOAP報文示例,用於獲取設備上所有接口的所有參數:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<auth:Authentication env:mustUnderstand="1" xmlns:auth="//www.yolosolive.com/netconf/base:1.0">
<auth:AuthInfo>800207F0120020C</auth:AuthInfo>
</auth:Authentication>
</env:Header>
<env:Body>
<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-bulk>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface/>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get-bulk>
</rpc>
</env:Body>
</env:Envelope>
用戶可通過以下三種方式來使用NETCONF協議配置/管理設備:
· 用戶可以通過Telnet、SSH和Console登錄到設備的CLI界麵,通過命令行界麵編輯下發NETCONF指令。在XML視圖下,將合法的NETCONF報文直接拷貝、粘貼到命令行提示符處,即可驗證設備的NETCONF功能是否運行正常。
· 用戶使用自己開發的配置工具給設備下發NETCONF指令來實現對設備的訪問。此時用戶需要將下發NETCONF指令用SOAP封裝為通用的格式,以便設備能夠正常轉換。因此,使用該方式前必須開啟NETCONF over SOAP功能。
與NETCONF、SOAP協議相關的協議規範有:
· RFC 3339:Date and Time on the Internet: Timestamps
· RFC 4741:NETCONF Configuration Protocol
· RFC 4742:Using the NETCONF Configuration Protocol over Secure SHell (SSH)
· RFC 4743:Using NETCONF over the Simple Object Access Protocol (SOAP)
· RFC 5277:NETCONF Event Notifications
· RFC 5381:Experience of Implementing NETCONF over SOAP
· RFC 5539:NETCONF over Transport Layer Security (TLS)
· RFC 6241:Network Configuration Protocol
表1-2 NETCONF配置任務簡介
配置任務 |
說明 |
詳細配置 |
配置NETCONF over SOAP功能 |
可選 |
|
配置NETCONF over SSH功能 |
可選 |
|
配置NETCONF日誌功能 |
可選 |
|
建立NETCONF會話 |
必選 |
|
訂閱事件 |
可選 |
|
給當前配置加鎖/解鎖 |
可選 |
|
<get>/<get-bulk>獲取信息 |
可選 |
|
<get-config>/<get-bulk-config>獲取配置信息 |
可選 |
|
<edit-config>編輯指定模塊數據 |
可選 |
|
配置保存、回滾、加載 |
可選 |
|
數據過濾功能 |
可選 |
|
命令行操作 |
可選 |
|
獲取NETCONF狀態信息 |
可選 |
|
獲取YANG文件的內容 |
可選 |
|
獲取會話信息 |
可選 |
|
關閉另一個會話 |
可選 |
|
退出XML視圖 |
可選 |
NETCONF支持封裝成SOAP報文後通過HTTP或HTTPS協議傳輸,即NETCONF over SOAP over HTTP和NETCONF over SOAP over HTTPS,使用該功能後,用戶可以通過開發配置工具給設備下發NETCONF指令來實現對設備的訪問。
表1-3 配置NETCONF over SOAP功能
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
開啟基於HTTP的NETCONF over SOAP功能 |
netconf soap http enable |
缺省情況下,基於HTTP的NETCONF over SOAP功能處於關閉狀態 FIPS模式下,不支持本命令 |
開啟基於HTTPS的NETCONF over SOAP功能 |
netconf soap https enable |
缺省情況下,基於HTTPS的NETCONF over SOAP功能處於關閉狀態 |
配置設備發送的基於HTTP的SOAP報文的DSCP優先級 |
netconf soap http dscp dscp-value |
缺省情況下,基於HTTP的SOAP報文的DSCP優先級為0 |
配置設備發送的基於HTTPS的SOAP報文的DSCP優先級 |
netconf soap https dscp dscp-value |
缺省情況下,基於HTTPS的SOAP報文的DSCP優先級為0 |
配置基於HTTP的NETCONF over SOAP功能關聯的ACL |
netconf soap http acl { acl-number | name acl-name } |
缺省情況下,未配置基於HTTP的NETCONF over SOAP功能關聯的ACL FIPS模式下,不支持本命令 |
配置基於HTTPS的NETCONF over SOAP功能關聯的ACL |
netconf soap https acl { acl-number | name acl-name } |
缺省情況下,未配置基於HTTPS的NETCONF over SOAP功能關聯的ACL |
配置NETCONF用戶的強製認證域 |
netconf soap domain domain-name |
缺省情況下,未配置NETCONF用戶的強製認證域。關於認證域的詳細介紹請參見“安全配置指導”中的“AAA” |
NETCONF支持標準協議規範中描述的NETCONF over SSH功能,開啟該功能後,用戶可以通過使用支持NETCONF over SSH登錄方式的客戶端配置工具給設備下發NETCONF指令來實現對設備的訪問。
表1-4 配置NETCONF over SSH功能
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
開啟NETCONF over SSH功能 |
netconf ssh server enable |
缺省情況下,NETCONF over SSH功能處於關閉狀態 |
指定NETCONF over SSH的監聽端口 |
netconf ssh server port port-number |
缺省情況下,NETCONF over SSH使用端口830 |
NETCONF日誌功能可以記錄操作源對設備進行的NETCONF操作,用戶通過指定NETCONF操作源和NETCONF操作類型,配置係統輸出指定類型的NETCONF日誌。
表1-5 配置NETCONF日誌功能
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
NETCONF日誌功能 |
netconf log source { all | { agent | soap } * } { { protocol-operation { all | { action | config | get | set | session | syntax | others } * } } | verbose } |
缺省情況下,未配置NETCONF日誌功能 |
· 客戶端必須給設備發送hello信息,完成能力集的交互後,設備才會處理客戶端發送的其他請求。
· 設備同一時間內允許建立的最大連接數可以通過aaa session-limit命令配置,關於該命令的詳細描述,請參見“安全配置指導”中的“AAA”。用戶數超過上限後,新登錄的用戶將登錄失敗。
· 多個用戶同時進行NETCONF配置時,可能會導致用戶請求與配置結果不一致,因此,請避免多個用戶同時進行NETCONF配置。
用戶通過Telnet、SSH、Console、或配置工具與設備建立NETCONF連接,如果在超時時間內,用戶與設備無任何NETCONF報文交互,達到超時時間後,設備將斷開與用戶配置端的NETCONF連接。
表1-6 配置NETCONF會話超時時間
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
配置NETCONF會話超時時間 |
netconf { soap | agent } idle-timeout minute |
缺省情況如下: · 基於NETCONF over SOAP over HTTP和NETCONF over SOAP over HTTPS的會話超時時間為10分鍾 · 基於NETCONF over SSH、NETCONF over Telnet和NETCONF over Console的會話超時時間為0,即不超時 |
· 進入XML視圖後,用戶需要嚴格按照NETCONF報文格式將報文拷貝、粘貼到XML視圖中。在NETCONF配置過程中,請勿進行其他任何操作(例如手工輸入NETCONF報文),否則可能導致NETCONF配置失敗。
· 在XML視圖下進行NETCONF配置時,NETCONF報文最後需要添加“]]>]]>”,否則設備無法識別。本手冊舉例中,為方便識別XML格式,均未添加此結束符,實際操作中請自行添加。
表1-7 進入XML視圖
操作 |
命令 |
說明 |
進入XML視圖 |
xml |
該命令在用戶視圖下執行 |
進入XML視圖後,客戶端和設備必須交換各自支持的能力集,雙方收到對方的能力集後才可以進行下一步操作。
客戶端進入XML視圖後,設備會發送如下報文自動告知客戶端支持的NETCONF能力集:
<?xml version="1.0" encoding="UTF-8"?><hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><capabilities><capability>urn:ietf:params:netconf:base:1.1</capability><capability>urn:ietf:params:netconf:writable-running</capability><capability>urn:ietf:params:netconf:capability:notification:1.0</capability><capability>urn:ietf:params:netconf:capability:validate:1.1</capability><capability>urn:ietf:params:netconf:capability:interleave:1.0</capability><capability>urn:h3c:params:netconf:capability:h3c-netconf-ext:1.0</capability></capabilities><session-id>1</session-id></hello>]]>]]>
<capabilities>和</capabilities>之間的內容表示設備支持的能力集,以具體設備實際情況為準。
<session-id>和</session-id>之間的內容表示為本次會話分配的會話ID,用來唯一標識本次會話。
客戶端收到設備發送的能力集協商報文後,需要給設備發送如下格式的報文,告知設備客戶端支持哪些NETCONF能力集。
Hello協商報文格式如下:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
capability-set
</capability>
</capabilities>
</hello>
其中,capability-set表示客戶端支持的能力集,由用戶定義。一個<capability>和</capability>選項對中填寫一個能力集,可以使用多個選項對,發送多個能力集。
用戶向設備訂閱事件後,設備上發生用戶訂閱的事件時,設備會自動向訂閱的客戶端發送事件的相關信息。
訂閱隻對當前連接生效。如果連接斷開,訂閱會自動取消。
如果不配置訂閱的事件流<stream></stream>,則缺省訂閱Syslog事件。
事件訂閱報文格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<create-subscription xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<stream>NETCONF</stream>
<filter>
<event xmlns="//www.yolosolive.com/netconf/event:1.0">
<Code>code</Code>
<Group>group</Group>
<Severity>severity</Severity>
</event>
</filter>
<startTime>start-time</startTime>
<stopTime>stop-time</stopTime>
</create-subscription>
</rpc>
stream表示訂閱的事件流,Syslog事件流的名稱為“NETCONF”。
event表示訂閱的事件。此處可訂閱的事件為係統支持的日誌信息。具體可以訂閱哪些模塊的事件,請參見《日誌信息參考手冊》。
code表示日誌信息中的助記符。
group表示日誌信息中的模塊名。
severity表示日誌信息中的安全級別。
start-time表示訂閱的開始時間。
stop-time表示訂閱的結束時間。
設備收到訂閱報文後會回應客戶端,當客戶端收到如下報文時,表示訂閱成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100" xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply >
當訂閱出錯時設備會返回錯誤信息,例如:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<rpc-error>
<error-type>error-type</error-type>
<error-tag>error-tag</error-tag>
<error-severity>error-severity</error-severity>
<error-message xml:lang="en">error-message</error-message>
</rpc-error>
</rpc-reply>
錯誤報文的詳細定義請參見RFC 4741。
事件訂閱報文格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<create-subscription xmlns ='urn:ietf:params:xml:ns:netconf:notification:1.0'>
<stream>NETCONF_MONITOR_EXTENSION</stream>
<filter>
<NetconfMonitor xmlns='//www.yolosolive.com/netconf/monitor:1.0'>
<XPath>XPath</XPath>
<Interval>interval</Interval>
<ColumnConditions>
<ColumnCondition>
<ColumnName>ColumnName</ColumnName>
<ColumnValue>ColumnValue</ColumnValue>
<ColumnCondition>ColumnCondition</ColumnCondition>
</ColumnCondition>
</ColumnConditions>
<MustIncludeResultColumns>
<ColumnName>columnName</ColumnName>
</MustIncludeResultColumns>
</NetconfMonitor>
</filter>
<startTime>start-time</startTime>
<stopTime>stop-time</stopTime>
</create-subscription>
</rpc>
stream表示訂閱的事件流,監控事件流的名稱為“NETCONF_MONITOR_EXTENSION”。
NetconfMonitor表示監控事件的過濾信息。
XPath表示監控事件的路徑,格式為:模塊名[/子模塊名]/表名。
interval表示監控的時間間隔,取值範圍為1~4294967,缺省值為300,單位為秒,即每隔300秒獲取一次符合訂閱條件的信息。
ColumnName表示監控列的名稱,格式為:[組名稱.]列名稱。
ColumnValue表示監控列的過濾值。
ColumnCondition表示監控列的過濾條件,取值如表1-8所示,請根據監控列的過濾值的類型填寫過濾條件。
監控列的過濾條件值 |
說明 |
more |
大於 |
less |
小於 |
notLess |
不小於 |
notMore |
不大於 |
equal |
等於 |
notEqual |
不等於 |
include |
包含 |
exclude |
不包含 |
startWith |
開始於 |
endWith |
結束於 |
start-time表示訂閱的開始時間。
stop-time表示訂閱的結束時間。
設備收到訂閱報文後會回應客戶端,當客戶端收到如下報文時,表示訂閱成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100" xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
事件訂閱報文格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:xs="//www.yolosolive.com/netconf/base:1.0">
<create-subscription xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<stream>XXX_STREAM</stream>
<filter type="subtree">
<event xmlns="//www.yolosolive.com/netconf/event:1.0/xxx-features-list-name:1.0">
<ColumnName xs:condition="Condition">value</ColumnName>
</event>
</filter>
<startTime>start-time</startTime>
<stopTime>stop-time</stopTime>
</create-subscription>
</rpc>
stream表示訂閱的事件流,請根據設備實際支持情況填寫模塊上報事件流的名稱。
event表示訂閱的事件的名稱,一個事件流中包括多個事件,請根據事件流下的事件填寫,命名空間為事件流的命名空間。
ColumnName表示當前事件下需要過濾的列的名稱。
Condition表示事件列的過濾條件,取值如表1-8所示,請根據事件列的過濾值的類型填寫過濾條件。
value表示當前事件下需要過濾的列的值。
start-time表示訂閱的開始時間。
stop-time表示訂閱的結束時間。
設備收到訂閱報文後會回應客戶端,當客戶端收到如下報文時,表示訂閱成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100" xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
客戶端訂閱沒有時間限製的全部事件。訂閱後在斷開連接之前,設備發生的所有事件都會發送給客戶端。
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 訂閱全部事件,不限製訂閱時間。
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<create-subscription xmlns ="urn:ietf:params:xml:ns:netconf:notification:1.0">
<stream>NETCONF</stream>
</create-subscription>
</rpc>
# 如果客戶端收到如下報文,則表示訂閱成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="100">
<ok/>
</rpc-reply>
當用戶(IP地址為192.168.100.130)登錄設備時,設備會發送如下報文來通知訂閱客戶端:
<?xml version="1.0" encoding="UTF-8"?>
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2011-01-04T12:30:52</eventTime>
<event xmlns="//www.yolosolive.com/netconf/event:1.0">
<Group>SHELL</Group>
<Code>SHELL_LOGIN</Code>
<Slot>6</Slot>
<Severity>Notification</Severity>
<context>VTY logged in from 192.168.100.130.</context>
</event>
</notification>
設備支持通過NETCONF、CLI、SNMP等多種方式配置,當用戶管理、維護設備或者定位網絡問題時,為防止其他用戶修改當前配置、引入幹擾,可以使用本特性給當前配置加鎖。
給當前配置加鎖後,隻有持有鎖的用戶可以修改設備的當前配置,其他用戶隻能讀取,不能修改當前配置。
NETCONF加鎖操作將鎖定配置數據,即<edit-config>操作中指定的配置數據,其他操作(例如<get>操作)不受鎖的限製。
隻有持有鎖的用戶可以解鎖,解鎖後其他用戶才可以修改設備的當前配置或另外加鎖。如果持有鎖的用戶的當前連接斷開,係統會自動解鎖。
目前設備隻支持對當前配置加鎖,不能對具體的功能模塊進行加鎖。請將以下報文拷貝、粘貼到客戶端,用戶即能完成加鎖操作:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lock>
<target>
<running/>
</target>
</lock>
</rpc>
設備收到加鎖報文後會回應客戶端,當客戶端收到如下報文時,表示加鎖成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
隻有鎖的持有用戶才能解鎖,其他用戶不能解鎖。
請將以下報文拷貝、粘貼到客戶端,用戶即能完成解鎖操作:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<unlock>
<target>
<running/>
</target>
</unlock>
</rpc>
設備收到解鎖報文後會回應客戶端,當客戶端收到如下報文時,表示解鎖成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
給設備加鎖,以免其他用戶使用XML語言修改設備的當前配置。
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 對當前配置加鎖。
請將以下報文拷貝、粘貼到客戶端:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lock>
<target>
<running/>
</target>
</lock>
</rpc>
# 如果客戶端收到如下報文,則表示加鎖成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
用戶加鎖成功後,另一客戶端發送加鎖報文,設備會返回如下報文:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<rpc-error>
<error-type>protocol</error-type>
<error-tag>lock-denied</error-tag>
<error-severity>error</error-severity>
<error-message xml:lang="en">Lock failed because the NETCONF lock is held by another session.</error-message>
<error-info>
<session-id>1</session-id>
</error-info>
</rpc-error>
</rpc-reply>
以上報文表明:加鎖失敗,session-id是1的用戶已經持有鎖。
NETCONF支持用戶對設備進行業務操作,包括對指定信息的獲取和修改。基本標簽有<get>、<get-bulk>、<get-config>、<get-bulk-config>和<edit-config>,分別用來獲取所有數據、獲取配置數據和編輯指定模塊的數據。詳細規則參見《NETCONF XML API手冊》。
用戶執行<get>、<get-bulk>、<get-config>或<get-bulk-config>操作獲取設備數據時,如果所獲取數據中包含NETCONF不能識別的字符,則NETCONF將該字符轉換為“?”輸出到客戶端。
<get>操作用來獲取數據,包括運行狀態數據和配置數據。
<get-bulk>操作用來從指定索引的下一條開始批量獲取後續N條數據(索引行數據不返回),包括運行狀態數據和配置數據。用戶通過index屬性由指定索引,通過count屬性指定N。如未指定索引,則以第一條為索引;如未指定N,或者數據表中符合條件的數據記錄不足N條,則返回表中所有剩下的數據條目。
<get>操作會返回所有符合條件的數據,在某些情況下,會導致獲取數據效率不高。<get-bulk>允許用戶從固定數據項開始,向後獲取指定條目的數據記錄。
<get>和<get-bulk>報文的通用格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<getoperation>
<filter>
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
指定模塊,子模塊,表名,列名
</top>
</filter>
</getoperation>
</rpc>
其中,getoperation可以為get或者get-bulk。<filter>選項用於過濾信息,<filter>中可包括模塊名、子模塊名、表名和列名:
· 如果不指定模塊(子模塊),則表示全部模塊(子模塊)。一旦指定模塊(子模塊),則返回數據隻包含指定模塊(子模塊)。
· 如果模塊下不指定表,則表示全部表。一旦指定表,則返回數據隻包含指定表。
· 如果隻指定索引列,則返回的數據包括全部的列。如果同時指定了索引列之外的其他列,則意味著返回的數據僅僅包含索引列和指定的列。
<get-bulk>操作報文中還可以攜帶count和index參數,如下為一個攜帶了count和index參數的<get-bulk>操作報文示例:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:xc="//www.yolosolive.com/netconf/base:1.0">
<get-bulk>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0" xmlns:base="//www.yolosolive.com/netconf/base:1.0">
<Syslog>
<Logs xc:count="5">
<Log>
<Index>10</Index>
</Log>
</Logs>
</Syslog>
</top>
</filter>
</get-bulk>
</rpc>
其中,<get-bulk>操作報文中的count屬性遵循如下約定:
· count屬性的位置在可以從top下的節點開始,到表節點為止,即:模塊節點,表節點這幾個位置都能放置count屬性,其他位置的count將不被解釋。
· 如果count放在模塊節點上,則報文中指定的子孫節點(表)中沒有count的都默認count屬性的值和模塊一致。
· 如果不指定count,則獲取出從指定索引開始的所有數據。
設備收到配置獲取請求報文後會將相應參數的值通過如下報文反饋給客戶端:
<?xml version="1.0"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
全部配置數據和狀態數據
</data>
</rpc-reply>
<get-config>和<get-bulk-config>用來獲取係統中所有可配置的變量的值,配置的方式包括CLI、MIB等。<get-config>和<get-bulk-config>操作報文中可以包含子標簽<filter>,用來對要獲取的信息進行過濾。
<get-config>和<get-bulk-config>的通用報文格式如下:
<?xml version="1.0"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
<filter>
<top xmlns="//www.yolosolive.com/netconf/config:1.0">
指定模塊,子模塊,表名,列名
</top>
</filter>
</get-config>
</rpc>
設備收到配置獲取請求報文後會將相應配置通過如下報文反饋給客戶端:
<?xml version="1.0"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
所有指定filter內的數據
</data>
</rpc-reply>
<edit-config>支持如下選項:merge、create、replace、remove、delete、默認操作選項、默認錯誤處理選項、測試處理、增量下發,關於這些選項的詳細描述請參見“2.1 附錄 A Comware V7中支持的NETCONF操作類型”。
<?xml version="1.0"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<edit-config>
<target><running></running></target>
<error-option>
失敗時默認操作
</error-option>
<config>
<top xmlns="//www.yolosolive.com/netconf/config:1.0">
指定模塊名,子模塊名,列名,表名
</top>
</config>
</edit-config>
</rpc>
· 設備收到edit-config請求後會回應客戶端,當客戶端收到如下報文時,表示設置成功:
<?xml version="1.0">
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
· 另外,用戶還可以通過<get>操作可以查看參數的當前值是否和edit-config操作設置的值一致。
獲取所有模塊所有配置數據。
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 獲取所有模塊所有配置數據。
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
</get-config>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功:
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:web="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="100">
<data>
<top xmlns="//www.yolosolive.com/netconf/config:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<IfIndex>1307</IfIndex>
<Shutdown>1</Shutdown>
</Interface>
<Interface>
<IfIndex>1308</IfIndex>
<Shutdown>1</Shutdown>
</Interface>
<Interface>
<IfIndex>1309</IfIndex>
<Shutdown>1</Shutdown>
</Interface>
<Interface>
<IfIndex>1311</IfIndex>
<VlanType>2</VlanType>
</Interface>
<Interface>
<IfIndex>1313</IfIndex>
<VlanType>2</VlanType>
</Interface>
</Interfaces>
</Ifmgr>
<Syslog>
<LogBuffer>
<BufferSize>120</BufferSize>
</LogBuffer>
</Syslog>
<System>
<Device>
<SysName>H3C</SysName>
<TimeZone>
<Zone>+11:44</Zone>
<ZoneName>beijing</ZoneName>
</TimeZone>
</Device>
</System>
</top>
</data>
</rpc-reply>
獲取Syslog模塊的所有配置數據
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 獲取Syslog模塊的所有配置數據。
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/config:1.0">
<Syslog/>
</top>
</filter>
</get-config>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="100">
<data>
<top xmlns="//www.yolosolive.com/netconf/config:1.0">
<Syslog>
<LogBuffer>
<BufferSize>120</BufferSize>
</LogBuffer>
</Syslog>
</top>
</data>
</rpc-reply>
取接口表的一條數據
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.0</capability>
</capabilities>
</hello>
# 取接口表的一條數據。
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:web="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-bulk>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0" xmlns:web="//www.yolosolive.com/netconf/base:1.0">
<Ifmgr>
<Interfaces web:count="1">
</Interfaces>
</Ifmgr>
</top>
</filter>
</get-bulk>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功:
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:web="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="100">
<data>
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<IfIndex>3</IfIndex>
<Name>GigabitEthernet1/0/2</Name>
<AbbreviatedName>GE1/0/2</AbbreviatedName>
<PortIndex>3</PortIndex>
<ifTypeExt>22</ifTypeExt>
<ifType>6</ifType>
<Description>GigabitEthernet1/0/2 Interface</Description>
<AdminStatus>2</AdminStatus>
<OperStatus>2</OperStatus>
<ConfigSpeed>0</ConfigSpeed>
<ActualSpeed>100000</ActualSpeed>
<ConfigDuplex>3</ConfigDuplex>
<ActualDuplex>1</ActualDuplex>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</data>
</rpc-reply>
修改syslog模塊中的日誌緩衝區可存儲的信息條數為512。
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.0</capability>
</capabilities>
</hello>
# 把Syslog模塊LogBuffer表中的BufferSize列,改成512。
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:web="urn:ietf:params:xml:ns:netconf:base:1.0">
<edit-config>
<target>
<running/>
</target>
<config>
<top xmlns="//www.yolosolive.com/netconf/config:1.0" web:operation="merge">
<Syslog>
<LogBuffer>
<BufferSize>512</BufferSize>
</LogBuffer>
</Syslog>
</top>
</config>
</edit-config>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
使用NETCONF功能,用戶可以對設備配置進行保存、回滾和加載操作。
保存、回滾和加載操作消耗係統資源較多,因此,請避免在係統資源占用較大的情況下執行這些操作。
請將以下報文拷貝、粘貼到客戶端,用戶即可將設備的當前配置保存到指定名稱的文件中,同時該文件將自動作為下次啟動配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save OverWrite="false">
<file>指定文件的名稱</file>
</save>
</rpc>
其中,“指定文件的名稱”必須以存儲介質的名稱開頭,後綴為.cfg。當報文中存在<file>列時,必須輸入指定文件的名稱,不能為空;如果不存在該列,則設備會自動將當前配置保存到缺省的主用下次啟動配置文件中。
OverWrite標誌的默認取值為true。缺省情況下,當指定的配置文件名與原有配置文件名相同時,原文件將被覆蓋,當前配置保存成功。如果指定OverWrite的值為false,則當指定的配置文件名與原有配置文件名相同時,當前配置保存失敗,同時返回錯誤提示信息。
設備收到配置保存請求後會回應客戶端,當客戶端收到如下報文時,表示保存成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
請將以下報文拷貝、粘貼到客戶端,用戶即可將設備的當前配置恢複到指定配置文件中的配置:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<rollback>
<file>指定文件的名稱</file>
</rollback>
</rpc>
設備收到配置回滾請求後會回應客戶端,當客戶端收到如下報文時,表示配置回滾成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
設備支持對當前正在運行的配置進行回滾,配置回滾點後,設備可以在如下場景下進行配置回滾:
· NETCONF客戶端主動下發配置回滾指令。
· NETCONF客戶端在指定的時間內無任何指令,即NETCONF會話空閑時間超過配置的回滾空閑超時時間。
· NETCONF客戶端和設備間的連接異常斷開。
配置回滾步驟如下:
如果存在多個NETCONF會話同時配置設備,建議配置回滾前先用<lock>鎖定係統,否則可能導致設備運行配置與回滾前配置不一致。
(1) 對當前係統加鎖。
(2) 下發<save-point>/<begin>操作進行配置回滾點標記。
(3) 下發<edit-config>操作,對設備進行所需配置。
(4) 下發<save-point>/<commit>進行配置確認,可分多次修改配置並確認。
(5) 下發<save-point>/<rollback>進行配置回滾,可選擇對應的一次commit進行配置回滾,或者等待NETCONF會話空閑時間超過配置的回滾空閑超時時間而自動進行配置回滾到最近使用的commit的配置。
(6) 下發<save-point>/<end>結束配置回滾功能。
(7) 對當前係統解鎖。
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<begin>
<confirm-timeout>100</confirm-timeout>
</begin>
</save-point>
</rpc>
回滾空閑超時時間<confirm-timeout>為可選,取值範圍為1~65535,單位為秒,缺省為600秒。
(2) 驗證結果
當客戶端收到如下報文時,表示配置回滾點成功:
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<save-point>
<commit>
<commit-id>1</commit-id>
</commit>
</save-point>
</data>
</rpc-reply>
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<rollback>
<commit-id/>
<commit-index/>
<commit-label/>
</rollback>
</save-point>
</rpc>
<commit-id/>、<commit-index/>、<commit-label/>任選一個,或者不選時回滾此前最近使用的commit的配置。其中commit-id為係統唯一標識的commit編號。commit-index表示最近50次的commit,0表示最近一次下發commit,49表示最遠一次commit。commit-label為標簽,不同的commit標簽不能相同,可以沒有標簽。
(2) 驗證結果
當客戶端收到如下報文時,表示主動下發配置回滾成功:
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok></ok>
</rpc-reply>
下發<save-point>/<commit>操作接受當前配置。使能save-point後,係統支持最近50個commit回滾點的配置回滾。超過50個回滾點後,進行commit操作時需指定force屬性強製覆蓋最早的回滾點。
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<commit>
<label>SUPPORT VLAN<label>
<comment>VLANs 1 to 100 and interfaces.</comment>
</commit>
</save-point>
</rpc>
<label/>和<comment/>可選。
(2) 驗證結果
當客戶端收到如下報文時,表示主動下發配置確認成功:
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<save-point>
<commit>
<commit-id>2</commit-id>
</commit>
</save-point>
</data>
</rpc-reply>
下發<save-point>/<end>操作取消配置回滾。
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<end/>
</save-point>
</rpc>
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<end/>
</save-point>
</rpc>
(2) 驗證結果
當客戶端收到如下報文時,返回對應的end結果成功。
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
下發<save-point>/<get-commits>操作獲取commit的操作記錄。
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<get-commits>
<commit-id/>
<commit-index/>
<commit-label/>
</get-commits>
</save-point>
</rpc>
<commit-id>,<commit-index>,<commit-label>任選一個,也可以都不選,顯示所有的commit記錄。
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<get-commits>
<commit-label>SUPPORT VLAN</commit-label>
</get-commits>
</save-point>
</rpc>
(2) 驗證結果
當客戶端收到如下報文時,返回對應的commit操作記錄:
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<save-point>
<commit-information>
<CommitID>2</CommitID>
<TimeStamp>Thu Oct 30 11:30:28 1980</TimeStamp>
<UserName>test</UserName>
<Label>SUPPORT VLAN</Label>
</commit-information>
</save-point>
</data>
</rpc-reply>
下發<save-point>/<get-commit-information>操作獲取對應的commit操作時的配置。
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<get-commit-information>
<commit-information>
<commit-id/>
<commit-index/>
<commit-label/>
</commit-information>
<compare-information>
<commit-id/>
<commit-index/>
<commit-label/>
</compare-information
</get-commit-information>
</save-point>
</rpc>
<commit-id/>,<commit-index/>,<commit-label/>任選一個。<compare-information/>可選。
<get-commit-information>不輸入參數顯示最近的使用的commit配置。
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<get-commit-information>
<commit-information>
<commit-label>SUPPORT VLAN</commit-label>
</commit-information>
</get-commit-information>
</save-point>
</rpc>
(2) 驗證結果
當客戶端收到如下報文時,顯示對應的配置信息:
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<save-point>
<commit-information>
<content>
…
interface vlan 1
…
</content>
</commit-information>
</save-point>
</data>
</rpc-reply>
<load>操作執行後,指定文件中的配置會被合並到設備的當前配置中。設備會將指定文件中的配置中的配置和當前配置進行比較:對於指定文件中有,但當前配置中沒有的配置,直接運行;對於指定文件中和當前配置中不一致的配置,則用指定文件中的配置替換當前配置中的對應配置。
需要注意的是,如果隻有刪除設備中一些現有的配置才能使指定文件中的某些配置生效,則需要先刪除現有配置後再加載文件,否則這些配置無法生效。
請將以下報文拷貝、粘貼到客戶端,用戶即可將指定文件中的配置追加到當前配置中:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<load>
<file>指定文件的名稱</file>
</load>
</rpc>
其中,“指定文件的名稱”必須以存儲介質的名稱開頭,後綴為.cfg。
設備收到配置加載請求後會回應客戶端,當客戶端收到如下報文時,表示配置加載成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
將設備的當前配置保存到配置文件my_config.cfg。
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 將設備的當前配置保存到配置文件my_config.cfg。
請將以下報文拷貝、粘貼到客戶端:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save>
<file>my_config.cfg</file>
</save>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
當用戶執行<get>、<get-bulk>、<get-config>或者<get-bulk-config>操作時,在XML語言中增加過濾條件,可以使用戶隻看到自己關心的數據。數據過濾包括基於表的過濾和基於列的過濾:
· 基於表的過濾用於過濾表的信息。
· 基於列的過濾用於過濾單個列的信息。
基於表的過濾需要在基於列的過濾之前配置。
基於表的過濾中,過濾條件類似命令行,命令空間為//www.yolosolive.com/netconf/base:1.0,屬性名為filter。關於支持該過濾方式表的詳細信息,具體請參見模塊的XML API手冊。
如下要求返回IPv4路由表中匹配IP地址為1.1.1.0和24位掩碼最長的數據:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="//www.yolosolive.com/netconf/base:1.0">
<get>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Route>
<Ipv4Routes>
<RouteEntry h3c:filter="IP 1.1.1.0 MaskLen 24 longer"/>
</Ipv4Routes>
</Route>
</top>
</filter>
</get>
</rpc>
僅基於表的過濾支持該配置,查詢條件必須寫在行的屬性上。
基於列的過濾包括嚴格匹配、正則表達式匹配過濾和條件匹配過濾。同時指定多種過濾條件時,隻有一個生效,其優先級從高到底依次為:嚴格匹配過濾、正則表達式匹配過濾和條件匹配過濾。
嚴格匹配包括兩種匹配方式,一種是元素值方式,還有一種是屬性名方式。
用戶在XML語言中直接指定對應的元素值,設備將對這些值進行嚴格匹配。如果指定了多個元素的值,則返回同時符合這幾個條件的數據。隻有完全匹配條件才返回成功。
如下為一個NETCONF報文示例,用於獲取所有狀態為UP的接口的配置信息:
<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<AdminStatus>1</AdminStatus>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get>
</rpc>
當用戶在行的位置上放置的某個屬性的名稱和當前表的某個列的名稱一致,則這個屬性的值將與用戶下發配置中同名稱的列的值進行嚴格匹配,例如,上麵例子用屬性名方式的等價XML請求為:
<rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0" xmlns:data="//www.yolosolive.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface data:AdminStatus="1"/>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get>
</rpc>
以上兩個NETCONF報文示例說明通過不同的嚴格匹配方式都可以獲取所有狀態為UP的接口的索引和指定列信息。
當過濾條件比較複雜時,可以在指定元素上設置regExp屬性為一個正則表達式,以完成過濾的目的。
如下為一個NETCONF報文示例,用於獲取接口的描述信息,並要求這些描述信息全部為大寫字母,不能有其他字符。
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="//www.yolosolive.com/netconf/base:1.0">
<get-config>
<source>
<running/>
</source>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/config:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<Description h3c:regExp="^[A-Z]*$"/>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get-config>
</rpc>
下列數據類型支持正則表達式匹配:各種整數、各種日期和時間、各種字符串、IPv4地址、IPv4掩碼、IPv6地址、MAC地址、OID、時區。
由於正則表達僅能夠完成字符匹配,對於數值邏輯的判斷過濾實現起來比較麻煩,此時,可使用條件匹配過濾功能。
條件匹配通過在元素中增加match屬性完成,屬性的值(即過濾條件)可以為數字、字符串。
表1-9 條件匹配命令
操作 |
命令 |
說明 |
大於 |
match="more:value" |
值大於value,支持的數據類型為:日期、數字、字符串 |
小於 |
match="less:value" |
值小於value,支持的數據類型為:日期、數字、字符串 |
不小於 |
match="notLess:value" |
值不小於value,支持的數據類型為:日期、數字、字符串 |
不大於 |
match="notMore:value" |
值不大於value,支持的數據類型為:日期、數字、字符串 |
等於 |
match="equal:value" |
值等於value,支持的數據類型為:日期、數字、字符串、OID、BOOL |
不等於 |
match="notEqual:value" |
值不等於value,支持的數據類型為:日期、數字、字符串、OID、BOOL |
包含 |
match="include:string" |
包含字符串string,支持的數據類型為:字符串 |
不包含 |
match="exclude:string" |
不能包含字符串string,支持的數據類型為:字符串 |
開始於 |
match="startWith:string" |
以字符串string開頭,支持的數據類型為:字符串、OID |
結束於 |
match="endWith:string" |
以字符串string結束,支持的數據類型為:字符串 |
如下為一個NETCONF報文示例,用於獲取實體擴展信息中CPU利用率大於50%的實體。
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="//www.yolosolive.com/netconf/base:1.0">
<get>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Device>
<ExtPhysicalEntities>
<Entity>
<CpuUsage h3c:match="more:50"></CpuUsage>
</Entity>
</ExtPhysicalEntities>
</Device>
</top>
</filter>
</get>
</rpc>
取Ifmgr模塊下Interfaces表下Description列包含Gigabit的所有數據。
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 取Ifmgr模塊Interfaces表下Description列包含Gigabit的所有數據。
請將以下報文拷貝、粘貼到客戶端:
<?xml version="1.0"?>
<rpc message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="//www.yolosolive.com/netconf/base:1.0">
<get>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<Description h3c:regExp="(Gigabit)+"/>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="//www.yolosolive.com/netconf/base:1.0" message-id="100">
<data>
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<IfIndex>2681</IfIndex>
<Description>GigabitEthernet1/0/1 Interface</Description>
</Interface>
<Interface>
<IfIndex>2685</IfIndex>
<Description>GigabitEthernet1/0/2 Interface</Description>
</Interface>
<Interface>
<IfIndex>2689</IfIndex>
<Description>GigabitEthernet1/0/3 Interface</Description>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</data>
</rpc-reply>
取Ifmgr模塊Interfaces表下ifindex值大於等於5000的Name列信息。
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
#取Ifmgr模塊Interfaces表下ifindex值大於等於5000的Name列信息。
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="//www.yolosolive.com/netconf/base:1.0">
<get>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<IfIndex h3c:match="notLess:5000"/>
<Name/>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c="//www.yolosolive.com/netconf/base:1.0" message-id="100">
<data>
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<IfIndex>7241</IfIndex>
<Name>NULL0</Name>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</data>
</rpc-reply>
通過NETCONF功能,用戶可以將命令行封裝在XML報文中對設備進行操作。
通過NETCONF下發命令行操作消耗係統資源較多,因此,請避免一次下發多個命令行、或多個用戶同時進行NETCONF下發命令行操作。
當需要給設備發送命令時,請使用格式如下的NETCONF報文:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<CLI>
<Execution>
命令行
</Execution>
</CLI>
</rpc>
一對<Execution>子標簽中可以包含多個命令行,一條命令輸入完畢,換行,再輸入下一條命令即可。
設備收到命令行指令後會回應客戶端,當客戶端收到如下報文時,表示命令行執行成功(注意命令響應被CDATA節點包含):
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<CLI>
<Execution>
<![CDATA[對應命令行響應]]>
</Execution>
</CLI>
</rpc-reply>
向設備發送顯示VLAN相關信息的命令。
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 向設備發送顯示VLAN相關信息的命令。
請將以下報文拷貝、粘貼到客戶端:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<CLI>
<Execution>
display vlan
</Execution>
</CLI>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<CLI>
<Execution><![CDATA[
<Sysname>display vlan
Total VLANs: 1
The VLANs include:
1(default)
]]>
</Execution>
</CLI>
# <get><netconf-state/></get>報文的通用格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="m-641" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get>
<filter type='subtree'>
<netconf-state xmlns='urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring'>
<getType/>
</netconf-state>
</filter>
</get>
</rpc>
其中,getType可以為capabilities、datastores、schemas、sessions或者statistics:
· 不指定getType時,該操作則獲取NETCONF全部相關信息。
· 當指定getType時,該操作僅返回相應類型的應答數據。其中,getType取值為:
¡ capabilities:表示該操作用來獲取設備能力集。
¡ datastores:表示該操作用來獲取設備中的數據庫。
¡ schemas:表示該操作用來獲取設備中的YANG文件名稱列表。
¡ sessions:表示該操作用來獲取設備中的會話信息。
¡ statistics:表示該操作用來獲取NETCONF的統計信息。
目前該操作不支持數據過濾。
# 設備收到NETCONF信息獲取請求報文後,將相應參數的值通過如下報文反饋給客戶端:
<?xml version="1.0"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
全部NETCONF全部相關信息
</data>
</rpc-reply>
YANG文件中保存了設備支持的NETCONF操作,用戶通過獲取、並分析YANG文件的內容,從而獲知設備支持哪些NETCONF操作。
YANG文件集成在設備軟件中,命名格式為yang_identifier@yang_version.yang,用戶不能通過dir命令顯示YANG文件名,關於如何獲取設備上YANG文件名稱,詳細請參見1.13 獲取NETCONF相關信息。
如下報文要求返回名稱為[email protected]的YANG文件中的數據:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-schema xmlns='urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring'>
<identifier>syslog-data</identifier>
<version>2015-05-07</version>
<format>yang</format>
</get-schema>
</rpc>
設備收到YANG文件獲取請求報文後,將相應參數的值通過如下報文反饋給客戶端:
<?xml version="1.0"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
指定YANG文件的內容
</data>
</rpc-reply>
使用該功能用戶可以獲取當前設備的所有NETCONF會話信息。
請將以下報文拷貝、粘貼到客戶端:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-sessions/>
</rpc>
設備收到命令行指令後會回應客戶端,當客戶端收到如下報文時,表示命令行執行成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-sessions>
<Session>
<SessionID>用戶會話ID信息</SessionID>
<Line>line信息</Line>
<UserName>用戶登錄名稱</UserName>
<Since>用戶登錄時間</Since>
<LockHeld>用戶是否持有鎖</LockHeld>
</Session>
</get-sessions>
</rpc-reply>
獲取會話信息。
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 獲取設備上當前存在的NETCONF會話的信息。
請將以下報文拷貝、粘貼到客戶端:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-sessions/>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="100">
<get-sessions>
<Session>
<SessionID>1</SessionID>
<Line>vty0</Line>
<UserName></UserName>
<Since>2011-01-05T00:24:57</Since>
<LockHeld>false</LockHeld>
</Session>
</get-sessions>
</rpc-reply>
以上信息表明:目前有一個NETCONF連接,SessionID是1,登錄用戶類型vty0,登錄時間是2011-01-05T00:24:57,此用戶不持有鎖。
NETCONF支持一個用戶關閉除自己外的另一個NETCONF會話,被關閉會話的用戶退回到用戶視圖。
請將以下報文拷貝、粘貼到客戶端,用戶即能關閉指定的會話:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<kill-session>
<session-id>
指定session-ID
</session-id>
</kill-session>
</rpc>
設備收到會話關閉請求後會回應客戶端,當客戶端收到如下報文時,表示指定會話已經被關閉:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
當前有兩個NETCONF登錄用戶,session ID分別是1和2,session ID為1的用戶要關閉另一個用戶的會話。
# 進入XML視圖。
<Sysname> xml
# 進行能力交換。
請將以下報文拷貝、粘貼到客戶端:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
</capabilities>
</hello>
# 關閉session ID為2的用戶會話。
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<kill-session>
<session-id>2</session-id>
</kill-session>
</rpc>
如果客戶端收到如下報文,則表明session ID為2的NETCONF會話已經被關閉。建立該會話的用戶會從XML視圖退回到用戶視圖。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
對於處於XML視圖的用戶,要退回到用戶視圖,使用命令行來配置設備時,需要將以下報文拷貝、粘貼到客戶端:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<close-session/>
</rpc>
設備收到以上請求後會返回如下報文並退回到用戶視圖:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
Comware V7平台對NETCONF標準協議做了一些修訂,刪除了不常用的操作,增加部分新的操作,如表2-1所示。
表2-1 NETCONF協議支持的操作
操作 |
說明 |
XML格式樣例 |
get |
獲取數據,包括運行狀態數據和配置數據 |
獲取Syslog模塊的全部數據的XML請求如下: <rpc message-id ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:xc="//www.yolosolive.com/netconf/base:1.0"> <get> <filter type="subtree"> <top xmlns="//www.yolosolive.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:xc="//www.yolosolive.com/netconf/base:1.0"> <get-config> <source> <running/> </source> <filter type="subtree"> <top xmlns="//www.yolosolive.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"> <get-bulk> <filter type="subtree"> <top xmlns="//www.yolosolive.com/netconf/data:1.0"> <Ifmgr> <Interfaces xc:count="5" xmlns:xc=" //www.yolosolive.com/netconf/base:1.0"> <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="//www.yolosolive.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 ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:h3c=" //www.yolosolive.com/netconf/base:1.0"> <edit-config> <target> <running/> </target> <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0"> <top xmlns="//www.yolosolive.com/netconf/config:1.0"> <VLAN xc:operation="merge"> <HybridInterfaces> <Interface> <IfIndex>262</IfIndex> <UntaggedVlanList h3c: incremental="true">1-10</UntaggedVlanList> </Interface> </HybridInterfaces> </VLAN> </top> </config> </edit-config> </rpc> |
edit-config: merge |
在當前運行配置的基礎上直接運行指定配置 merge操作必須指定具體的操作對象(行): · 如果指定的對象存在,則直接配置該對象 · 如果指定的對象不存在,但允許創建,則先創建再配置該對象 · 如果指定的對象不存在且不允許創建,則返回merge失敗 |
將BufferSize設置為120的xml請求如下: <rpc message-id ="100" 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="//www.yolosolive.com/netconf/config:1.0"> <Syslog xmlns="//www.yolosolive.com/netconf/config:1.0" xc:operation="merge"> <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 ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <edit-config> <target> <running/> </target> <default-operation>none</default-operation> <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0"> <top xmlns="//www.yolosolive.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 ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <edit-config> <target> <running/> </target> <error-option>continue-on-error</error-option> <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0"> <top xmlns="//www.yolosolive.com/netconf/config:1.0"> <Ifmgr xc:operation="merge"> <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 ="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <edit-config> <target> <running/> </target> <test-option>test-only</test-option> <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0"> <top xmlns="//www.yolosolive.com/netconf/config:1.0"> <Ifmgr xc:operation="merge"> <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="//www.yolosolive.com/netconf/action:1.0"> <Ifmgr> <ClearAllIfStatistics> <Clear> </Clear> </ClearAllIfStatistics> </Ifmgr> </top> </action> </rpc> |
lock |
NETCONF加鎖操作將鎖定配置數據,即<edit-config>操作中指定配置數據,其他操作(例如<get>操作)不受鎖的限製 用戶通過NETCONF加鎖操作鎖定NETCONF連接後,其他用戶既不能使用NETCONF執行下發配置操作,也不能通過CLI或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和Exec兩種方式: · Execution:在用戶視圖下執行 · Configuration:在係統視圖下執行 對於其他視圖下命令,則需要在Configuration下先指定進子視圖的命令,在指定配置命令 |
在係統視圖下執行display this命令: <rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <CLI> <Configuration>display this</Configuration> </CLI> </rpc> |
save |
保存係統運行配置。save操作可以使用子元素<file>來指定保存的配置文件名稱。當save操作中不存在子元素<file>列時,則設備會自動將當前運行配置保存到主用下次啟動配置文件中。OverWrite屬性用來判斷當指定的配置文件名存在時,當前配置是否覆蓋原配置文件並保存成功。 |
將設備當前配置保存到文件test.cfg中: <rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <save OverWrite="false"> <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> |
不同款型規格的資料略有差異, 詳細信息請向具體銷售和400谘詢。H3C保留在沒有任何通知或提示的情況下對資料內容進行修改的權利!