07-NETCONF配置
本章節下載: 07-NETCONF配置 (698.26 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 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/Telnet/Console;NETCONF支持HTTP、HTTPS登錄協議,即NETCONF over HTTPS/HTTP;NETCONF還支持封裝成SOAP(Simple Object Access Protocol,簡單對象訪問協議)報文後通過HTTP、HTTPS協議傳輸,即NETCONF over SOAP over HTTP/HTTPS FIPS模式下: 通信協議層為NETCONF提供麵向連接的、可靠的、順序的數據鏈路。NETCONF支持SSH、Console等CLI登錄方式/協議,即NETCONF over SSH/Console;NETCONF支持HTTPS登錄協議,即NETCONF over HTTPS;NETCONF還支持封裝成SOAP報文後通過HTTPS協議傳輸,即NETCONF over SOAP over HTTPS |
NETCONF命令必須符合XML語言的基本格式。
NETCONF和NETCONF over SOAP報文格式請遵循RFC 4741。
NETCONF操作以及可操作的數據項,請參見《NETCONF XML API手冊》。NETCONF報文的數據合法性都將經過校驗才會下發,如果校驗失敗則會向客戶端報錯。其中,數據合法性校驗通過XML Schema的方式完成。
如下為一個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功能是否運行正常。
· 非FIPS模式下,用戶可以通過HTTP、HTTPS登錄到設備的Web頁麵,係統會自動將Web頁麵的配置轉換成NETCONF指令下發給設備來實現對設備的訪問;FIPS模式下,用戶可以通過HTTPS登錄到設備的Web頁麵,係統會自動將Web頁麵的配置轉換成NETCONF指令下發給設備來實現對設備的訪問。該方式為NETCONF最普遍的使用方式,用戶在簡潔易用的圖像化Web頁麵上完成配置,配置結果也會以簡潔清晰的方式呈現給用戶,整個NETCONF的交互過程對用戶透明。
· 用配置工具與設備建立NETCONF over SOAP或NETCONF over SSH會話,給設備下發NETCONF指令來實現對設備的配置和管理。對於NETCONF over SOAP會話方式,需要將NETCONF指令用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使用專用命名空間 |
可選 |
|
建立NETCONF會話 |
必選 |
|
向設備進行事件訂閱 |
可選 |
|
給當前配置加鎖/解鎖 |
可選 |
|
<get>/<get-bulk>獲取信息 |
可選 |
|
<get-config>/<get-bulk-config>獲取配置信息 |
可選 |
|
<edit-config>編輯指定模塊數據 |
可選 |
|
配置保存、回滾、加載 |
可選 |
|
數據過濾功能 |
可選 |
|
命令行操作 |
可選 |
|
獲取NETCONF狀態信息 |
可選 |
|
獲取YANG文件的內容 |
可選 |
|
獲取會話信息 |
可選 |
|
關閉另一個會話 |
可選 |
|
退出XML視圖 |
可選 |
|
開啟NETCONF的告警功能 |
可選 |
NETCONF支持封裝成SOAP報文後通過HTTP、HTTPS協議傳輸,即NETCONF over SOAP over HTTP/HTTPS,使用該功能後,用戶可以通過開發Web配置工具給設備下發NETCONF指令來實現對設備的訪問。
表1-3 配置NETCONF over SOAP功能
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
(可選)配置基於HTTPS的NETCONF over SOAP功能與SSL服務器端策略關聯 |
netconf soap https ssl-server-policy policy-name |
缺省情況下,基於HTTPS的NETCONF over SOAP功能未與SSL服務器端策略關聯。 配置該功能後,設備將使用SSL服務器端策略指定的加密套件等SSL參數建立NETCONF連接,以加強基於HTTPS的NETCONF over SOAP功能的安全性。有關SSL服務器端策略的配置,請參見“安全配置指導”中的“SSL”。 如果修改了關聯的SSL服務器端策略,NETCONF客戶端和設備新建立的HTTPS連接將會引用新的策略,已建立的HTTPS連接不會受到影響,依然引用舊的策略。 |
開啟基於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 | web } * } { protocol-operation { all | { action | config | get | set | session | syntax | others } * } | verbose } |
缺省情況下,NETCONF action和set類操作日誌按行操作輸出,其他NETCONF日誌不輸出 |
開啟NETCONF操作轉化命令行日誌功能 |
netconf log xml2cli enable |
缺省情況下,NETCONF操作轉化命令行日誌功能處於關閉狀態 |
NETCONF支持共用命名空間和專用命名空間:
· 共用命名空間:各模塊共用一個命名空間。使用共用命名空間的報文中,命名空間位於<top>元素中,模塊位於<top>元素下,報文示例如下:
<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>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get-bulk>
</rpc>
· 專用命名空間:每個模塊單獨使用一個命名空間。使用專用命名空間的報文中無<top>元素,命名空間位於模塊名後,報文示例如下:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-bulk>
<filter type="subtree">
<Ifmgr xmlns="//www.yolosolive.com/netconf/data:1.0-Ifmgr">
<Interfaces>
</Interfaces>
</Ifmgr>
</filter>
</get-bulk>
</rpc>
兩種類型的命名空間互不兼容。客戶端與設備必須使用相同的命名空間才能建立會話。缺省情況下,NETCONF使用共用命名空間。如果客戶端不支持共用命名空間,則需要配置本命令,讓設備和客戶端建立會話時使用專用命名空間。
配置該命令後,用戶需要重新建立NETCONF會話,以使客戶端和設備使用相同的命名空間。
表1-6 配置NETCONF使用專用命名空間
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
配置NETCONF使用專用命名空間 |
netconf capability specific-namespace |
缺省情況下,NETCONF使用共用命名空間 |
· 客戶端必須給設備發送hello信息,完成能力集的交互後,設備才會處理客戶端發送的其他請求。
· 設備同一時間內允許建立的最大連接數可以通過aaa session-limit命令配置,關於該命令的詳細描述,請參見“安全配置指導”中的“AAA”。用戶數超過上限後,新登錄的用戶將登錄失敗。
· 多個用戶同時進行NETCONF配置時,可能會導致用戶請求與配置結果不一致,因此,請避免多個用戶同時進行NETCONF配置。
設備支持配置NETCONF空閑超時時間,用戶通過Telnet、SSH、Console、或配置工具與設備建立NETCONF連接後,如果在超時時間內,用戶與設備無任何報文交互,達到超時時間後,設備將斷開與用戶配置端的連接。
表1-7 配置NETCONF空閑超時時間
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
配置NETCONF空閑超時時間 |
netconf { soap | agent } idle-timeout minute |
缺省情況如下: · 基於HTTP/HTTPS的NETCONF over SOAP的空閑超時時間為10分鍾。 · 基於SSH/Telent/NETCONF over SSH的空閑超時時間為0,即不超時 |
· 進入XML視圖後,用戶需要嚴格按照NETCONF報文格式將報文拷貝、粘貼到XML視圖中。在NETCONF配置過程中,請勿進行其他任何操作(例如手工輸入NETCONF報文),否則可能導致NETCONF配置失敗。
· 在XML視圖下進行NETCONF配置時,NETCONF報文最後需要添加“]]>]]>”,否則設備無法識別。本手冊舉例中,為方便識別XML格式,均未添加此結束符,實際操作中請自行添加。
表1-8 進入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>...</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>選項對中填寫一個能力集,可以使用多個選項對,發送多個能力集。
用戶向設備訂閱事件後,設備上發生用戶訂閱的事件時,設備會自動向訂閱的客戶端發送事件的相關信息,信息內容包括事件的code、group、severity以及發生時間和描述信息。此處可訂閱的事件,即係統支持的日誌信息。具體可以訂閱哪些模塊的事件,請參見《日誌信息參考手冊》。
對於NETCONF over SOAP會話,設備不支持訂閱事件。
訂閱隻對當前連接生效。如果連接斷開,訂閱會自動取消。
多次發送訂閱報文,可以訂閱多個事件。
事件訂閱報文格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<create-subscription xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<stream>NETCONF</stream>
<filter>
<event xmlns="//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表示支持的事件流,目前隻支持NETCONF。
event表示訂閱的事件。
code表示日誌信息中的助記符。
group表示日誌信息中的模塊名。
severity表示日誌信息中的安全級別。
start-time表示訂閱的開始時間。
stop-time表示結束訂閱的時間。
設備收到訂閱報文後會回應客戶端,當客戶端收到如下報文時,表示訂閱成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101" xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply >
當訂閱出錯時設備會返回錯誤信息,例如:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<rpc-error>
<error-type>error-type</error-type>
<error-tag>error-tag</error-tag>
<error-severity>error-severity</error-severity>
<error-message xml:lang="en">error-message</error-message>
</rpc-error>
</rpc-reply>
錯誤報文的詳細定義請參見RFC 4741。
客戶端訂閱沒有時間限製的全部事件。訂閱後在斷開連接之前,設備發生的所有事件都會發送給客戶端。
# 進入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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<create-subscription xmlns ="urn:ietf:params:xml:ns:netconf:notification:1.0">
<stream>NETCONF</stream>
</create-subscription>
</rpc>
# 如果客戶端收到如下報文,則表示訂閱成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101">
<ok/>
</rpc-reply>
當設備上的風扇1有問題時,設備會發送如下報文來通知訂閱客戶端:
<?xml version="1.0" encoding="UTF-8"?>
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2019-01-04T12:30:46</eventTime>
<event xmlns="//www.yolosolive.com/netconf/event:1.0">
<Group>DEV</Group>
<Code>FAN_DIRECTION_NOT_PREFERRED</Code>
<Slot>6</Slot>
<Severity>Alert</Severity>
<context>Fan 1 airflow direction is not preferred on slot 6, please check it.</context>
</event>
</notification>
當用戶(IP地址為192.168.100.130)登錄設備時,設備會發送如下報文來通知訂閱客戶端:
<?xml version="1.0" encoding="UTF-8"?>
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2019-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連接,即支持多個用戶同時使用NETCONF功能管理和監控設備。所以,當用戶管理、維護設備或者定位網絡問題時,為防止其他NETCONF用戶修改當前配置、引入幹擾,可以使用本特性給當前配置加鎖。給當前配置加鎖後,隻有持有鎖的用戶可以修改設備的當前配置,其他NETCONF用戶隻能讀取,不能修改當前配置。
隻有持有鎖的用戶可以解鎖,解鎖後其他用戶才可以修改設備的當前配置或另外加鎖。如果持有鎖的用戶的當前連接斷開,係統會自動解鎖。
目前設備隻支持對當前配置加鎖,不能對具體的功能模塊進行加鎖。請將以下報文拷貝、粘貼到客戶端,用戶即能完成加鎖操作:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lock>
<target>
<running/>
</target>
</lock>
</rpc>
設備收到加鎖報文後會回應客戶端,當客戶端收到如下報文時,表示加鎖成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
隻有鎖的持有用戶才能解鎖,其他用戶不能解鎖。
請將以下報文拷貝、粘貼到客戶端,用戶即能完成解鎖操作:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<unlock>
<target>
<running/>
</target>
</unlock>
</rpc>
設備收到解鎖報文後會回應客戶端,當客戶端收到如下報文時,表示解鎖成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
給設備加鎖,以免其他用戶使用XML語言修改設備的當前配置。
# 進入XML視圖。
<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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lock>
<target>
<running/>
</target>
</lock>
</rpc>
# 如果客戶端收到如下報文,則表示加鎖成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
用戶加鎖成功後,另一客戶端發送加鎖報文,設備會返回如下報文:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<rpc-error>
<error-type>protocol</error-type>
<error-tag>lock-denied</error-tag>
<error-severity>error</error-severity>
<error-message xml:lang="en">Lock failed 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讀取大量數據記錄時,建議使用get-bulk方式批量獲取指定條目的數據記錄,例如指定每次獲取1000條數據;如果使用get方式讀取,建議get操作的數據量控製在1000條以內,以提高讀取效率。
· 如果所獲取數據中包含NETCONF不能識別的字符,則NETCONF將該字符轉換為“?”輸出到客戶端。
· 如果操作中的模塊進程未啟動,則該操作可能會將空數據通過如下報文反饋給客戶端:
<?xml version="1.0"?>
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data/>
</rpc-reply>
<get><netconf-state/></get>操作不支持數據過濾
<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 ="101" 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、Web等。<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 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>
對於支持netconf log xml2cli enable命令的設備,與客戶端交換的能力集中會包含<capability>urn:h3c:params:netconf:capability:h3c-xml2cli:1.0</capability>能力,如果客戶端聲明支持該能力,那麼設備收到edit-config請求且設置成功後,發給客戶端的回應報文為如下格式:
<?xml version="1.0">
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
<xml2cli>
指定模塊名,子模塊名,<cli>列,原edit-config請求的列名,表名
</xml2cli>
</rpc-reply>
其中<cli>列是原edit-config請求的列轉換後的命令行。例如:
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
<xml2cli>
<GRPC>
<Configuration xc:operation="merge" xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
<cli>grpc enable
grpc port 50052
grpc idle-timeout 25</cli>
<State>enable</State>
<Port>50052</Port>
<IdleTime>25</IdleTime>
</Configuration>
</GRPC>
</xml2cli>
</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="101">
<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>
<Fundamentals>
<WebUI>
<SessionAgingTime>98</SessionAgingTime>
</WebUI>
</Fundamentals>
</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="101">
<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="101" 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="101">
<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="101" 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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save OverWrite="false" Safely="false">
<file>指定文件的名稱</file>
</save>
</rpc>
其中,“指定文件的名稱”必須以存儲介質的名稱開頭,後綴為.cfg。當報文中存在<file>列時,必須輸入指定文件的名稱,不能為空;如果不存在該列,則設備會自動將當前配置保存到缺省的主用下次啟動配置文件中。
OverWrite標誌的默認取值為true。缺省情況下,當指定的配置文件名與原有配置文件名相同時,原文件將被覆蓋,當前配置保存成功。如果指定OverWrite的值為false,則當指定的配置文件名與原有配置文件名相同時,當前配置保存失敗,同時返回錯誤提示信息。
Safely標誌的默認取值為false。缺省情況下,存在同名配置文件時,係統先刪除該文件,再保存當前配置文件。在保存過程中,如果出現設備重啟、斷電、內存不足、設備存儲空間不足等問題,可能會出現當前配置保存失敗、下次啟動文件為空的問題。如果指定Safely的值為true,存在同名配置文件時,係統會先將當前配置保存到一個臨時文件,保存成功後,再用這個臨時文件替換原同名文件。因此,即使在保存過程中出現設備重啟、斷電等問題導致配置保存失敗,仍然能夠以原同名的配置文件啟動設備。
設備收到配置保存請求後會回應客戶端,當客戶端收到如下報文時,表示保存成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
請將以下報文拷貝、粘貼到客戶端,用戶即可將設備的當前配置恢複到指定配置文件中的配置:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<rollback>
<file>指定文件的名稱</file>
</rollback>
</rpc>
設備收到配置回滾請求後會回應客戶端,當客戶端收到如下報文時,表示配置回滾成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
設備支持對當前正在運行的配置進行回滾,配置回滾點後,設備可以在如下場景下進行配置回滾:
· NETCONF客戶端主動下發配置回滾指令。
· NETCONF客戶端在指定的時間內無任何指令,即NETCONF會話空閑時間超過配置的回滾空閑超時時間。
· NETCONF客戶端和設備間的連接異常斷開。
配置回滾步驟如下:
如果存在多個NETCONF會話同時配置設備,建議配置回滾前先用<lock>鎖定係統,否則可能導致設備運行配置與回滾前配置不一致。
(1) 對當前係統加鎖。
(2) 下發<save-point>/<begin>操作進行配置回滾點標記。
(3) 下發<edit-config>操作,對設備進行所需配置。
(4) 下發<save-point>/<commit>進行配置確認,可分多次修改配置並確認。
(5) 下發<save-point>/<rollback>進行配置回滾,可選擇對應的一次commit進行配置回滾,或者等待NETCONF會話空閑時間超過配置的回滾空閑超時時間而自動進行配置回滾到最近使用的commit的配置。
(6) 下發<save-point>/<end>結束配置回滾功能。
(7) 對當前係統解鎖。
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<begin>
<confirm-timeout>100</confirm-timeout>
</begin>
</save-point>
</rpc>
回滾空閑超時時間<confirm-timeout>為可選,取值範圍為1~65535,單位為秒,缺省為600秒。
(2) 驗證結果
當客戶端收到如下報文時,表示配置回滾點成功:
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<save-point>
<commit>
<commit-id>1</commit-id>
</commit>
</save-point>
</data>
</rpc-reply>
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<rollback>
<commit-id/>
<commit-index/>
<commit-label/>
</rollback>
</save-point>
</rpc>
<commit-id/>、<commit-index/>、<commit-label/>任選一個,或者不選時回滾此前最近使用的commit的配置。其中commit-id為係統唯一標識的commit編號。commit-index表示最近50次的commit,0表示最近一次下發commit,49表示最遠一次commit。commit-label為標簽,不同的commit標簽不能相同,可以沒有標簽。
(2) 驗證結果
當客戶端收到如下報文時,表示主動下發配置回滾成功:
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok></ok>
</rpc-reply>
下發<save-point>/<commit>操作接受當前配置。使能save-point後,係統支持最近50個commit回滾點的配置回滾。超過50個回滾點後,進行commit操作時需指定force屬性強製覆蓋最早的回滾點。
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<commit>
<label>SUPPORT VLAN<label>
<comment>vlan 1 to 100 and interfaces. Each vlan used for different custom as fllows: ……</comment>
</commit>
</save-point>
</rpc>
<label/>和<comment/>可選。
(2) 驗證結果
當客戶端收到如下報文時,表示主動下發配置確認成功:
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<save-point>
<commit>
<commit-id>2</commit-id>
</commit>
</save-point>
</data>
</rpc-reply>
下發<save-point>/<end>操作取消配置回滾。
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<end/>
</save-point>
</rpc>
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<end/>
</save-point>
</rpc>
(2) 驗證結果
當客戶端收到如下報文時,返回對應的end結果成功。
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
下發<save-point>/<get-commits>操作獲取commit的操作記錄。
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<get-commits>
<commit-id/>
<commit-index/>
<commit-label/>
</get-commits>
</save-point>
</rpc>
<commit-id>,<commit-index>,<commit-label>任選一個,也可以都不選,顯示所有的commit記錄。
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<get-commits>
<commit-label>SUPPORT VLAN</commit-label>
</get-commits>
</save-point>
</rpc>
(2) 驗證結果
當客戶端收到如下報文時,返回對應的commit操作記錄:
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<save-point>
<commit-information>
<CommitID>2</CommitID>
<TimeStamp>Thu Oct 30 11:30:28 1980</TimeStamp>
<UserName>test</UserName>
<Label>SUPPORT VLAN</Label>
</commit-information>
</save-point>
</data>
</rpc-reply>
下發<save-point>/<get-commit-information>操作獲取對應的commit操作時的配置。
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<get-commit-information>
<commit-information>
<commit-id/>
<commit-index/>
<commit-label/>
</commit-information>
<compare-information>
<commit-id/>
<commit-index/>
<commit-label/>
</compare-information
</get-commit-information>
</save-point>
</rpc>
<commit-id/>,<commit-index/>,<commit-label/>任選一個。<compare-information/>可選。
<get-commit-information>不輸入參數顯示最近的使用的commit配置。
(1) 客戶端發送報文
請將以下報文拷貝、粘貼到客戶端:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save-point>
<get-commit-information>
<commit-information>
<commit-label>SUPPORT VLAN</commit-label>
</commit-information>
</get-commit-information>
</save-point>
</rpc>
(2) 驗證結果
當客戶端收到如下報文時,顯示對應的配置信息:
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<save-point>
<commit-information>
<content>
…
interface vlan 1
…
</content>
</commit-information>
</save-point>
</data>
</rpc-reply>
<load>操作執行後,指定文件中的配置會被合並到設備的當前配置中。設備會將指定文件中的配置中的配置和當前配置進行比較:對於指定文件中有,但當前配置中沒有的配置,直接運行;對於指定文件中和當前配置中不一致的配置,則用指定文件中的配置替換當前配置中的對應配置。
需要注意的是,如果隻有刪除設備中一些現有的配置才能使指定文件中的某些配置生效,則需要先刪除現有配置後再加載文件,否則這些配置無法生效。
請將以下報文拷貝、粘貼到客戶端,用戶即可將指定文件中的配置追加到當前配置中:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<load>
<file>指定文件的名稱</file>
</load>
</rpc>
其中,“指定文件的名稱”必須以存儲介質的名稱開頭,後綴為.cfg。
設備收到配置加載請求後會回應客戶端,當客戶端收到如下報文時,表示配置加載成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
將設備的當前配置保存到配置文件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>
# 將設備的當前配置保存到配置文件config.cfg。
請將以下報文拷貝、粘貼到客戶端:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<save>
<file>config.cfg</file>
</save>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
當用戶執行<get>、<get-bulk>、<get-config>或者<get-bulk-config>操作時,在XML語言中增加過濾條件,可以使用戶隻看到自己關心的數據。數據過濾包括基於表的過濾和基於列的過濾:
· 基於表的過濾用於過濾表的信息。
· 基於列的過濾用於過濾單個列的信息。
基於表的過濾需要在基於列的過濾之前配置。
基於表的過濾中,過濾條件類似命令行,命令空間為//www.yolosolive.com/netconf/base:1.0,屬性名為filter。關於支持該過濾方式表的詳細信息,具體請參見模塊的XML API手冊。
如下要求返回IPv4路由表中匹配VRF名稱為vrf1,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=”vrf vrf1 IP 1.1.1.0 MaskLen 24 longer”/>
</Ipv4Routes>
</Route>
</top>
</filter>
</get>
</rpc>
僅基於表的過濾支持該配置,查詢條件必須寫在行的屬性上。
基於列的過濾包括嚴格匹配、正則表達式匹配過濾和條件匹配過濾。同時指定多種過濾條件時,隻有一個生效,其優先級從高到底依次為:嚴格匹配過濾、正則表達式匹配過濾和條件匹配過濾。
嚴格匹配包括兩種匹配方式,一種是元素值方式,還有一種是屬性名方式。
用戶在XML語言中直接指定對應的元素值,設備將對這些值進行嚴格匹配。如果指定了多個元素的值,則返回同時符合這幾個條件的數據。隻有完全匹配條件才返回成功。
如下為一個NETCONF報文示例,用於獲取所有狀態為UP的接口的配置信息:
<rpc message-id ="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get>
<filter type="subtree">
<top xmlns="//www.yolosolive.com/netconf/data:1.0">
<Ifmgr>
<Interfaces>
<Interface>
<AdminStatus>2</AdminStatus>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get>
</rpc>
當用戶在行的位置上放置的某個屬性的名稱和當前表的某個列的名稱一致,則這個屬性的值將與用戶下發配置中同名稱的列的值進行嚴格匹配,例如,上麵例子用屬性名方式的等價XML請求為:
<rpc message-id ="101" 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="2"/>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get>
</rpc>
以上兩個NETCONF報文示例說明通過不同的嚴格匹配方式都可以獲取所有狀態為UP的接口配置信息。
當過濾條件比較複雜時,可以在指定元素上設置regExp屬性為一個正則表達式,以完成過濾的目的。
如下為一個NETCONF報文示例,用於獲取接口的描述信息,並要求這些描述信息全部為大寫字母,不能有其他字符。
<rpc message-id="101" 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列包含Gig的所有數據。
# 進入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列包含Gig的所有數據。
請將以下報文拷貝、粘貼到客戶端:
<?xml version="1.0"?>
<rpc message-id="100"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:reg="//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="(Gig)+"/>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</filter>
</get>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:reg="//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:nc="//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:nc="//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>
<Interface>
<IfIndex>7243</IfIndex>
<Name>Register-Tunnel0</Name>
</Interface>
</Interfaces>
</Ifmgr>
</top>
</data>
</rpc-reply>
通過NETCONF功能,用戶可以將命令行封裝在XML報文中對設備進行操作。
通過NETCONF下發命令行操作消耗係統資源較多,因此,請避免一次下發多個命令行、或多個用戶同時進行NETCONF下發命令行操作。
當需要給設備發送命令時,請使用格式如下的NETCONF報文:
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<CLI>
<Execution>
命令行
</Execution>
</CLI>
</rpc>
一對<Execution>子標簽中可以包含多個命令行,一條命令輸入完畢,換行,再輸入下一條命令即可。
設備收到命令行指令後會回應客戶端,當客戶端收到如下報文時,表示命令行執行成功(注意命令響應被CDATA節點包含):
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<CLI>
<Execution>
<![CDATA[對應命令行響應]]>
</Execution>
</CLI>
</rpc-reply>
向設備發送顯示當前配置命令。
# 進入XML視圖。
<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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<CLI>
<Execution>
display current-configuration
</Execution>
</CLI>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<CLI>
<Execution><![CDATA[
<Sysname>display current-configuration
#
version 7.1.052, Demo 2501005
#
sysname Sysname
#
ftp server enable
ftp update fast
ftp timeout 2000
#
irf mac-address persistent timer
irf auto-update enable
undo irf link-delay
#
domain default enable system
#
telnet server enable
#
vlan 1
#
vlan 1000
#
radius scheme system
primary authentication 127.0.0.1 1645
#
return
]]>
</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.14 獲取NETCONF相關信息。
如下報文要求返回名稱為[email protected]的YANG文件中的數據:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-schema xmlns='urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring'>
<identifier>H3C-syslog-data</identifier>
<version>2019-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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-sessions/>
</rpc>
設備收到命令行指令後會回應客戶端,當客戶端收到如下報文時,表示命令行執行成功:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-sessions>
<Session>
<SessionID>用戶會話ID信息</SessionID>
<Line>line信息</Line>
<UserName>用戶登錄名稱</UserName>
<Since>用戶登錄時間</Since>
<LockHeld>用戶是否持有鎖</LockHeld>
</Session>
</get-sessions>
</rpc-reply>
獲取會話信息。
# 進入XML視圖。
<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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-sessions/>
</rpc>
# 如果客戶端收到類似如下的報文,則表示操作成功。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101">
<get-sessions>
<Session>
<SessionID>1</SessionID>
<Line>vty0</Line>
<UserName></UserName>
<Since>2019-01-05T00:24:57</Since>
<LockHeld>false</LockHeld>
</Session>
</get-sessions>
</rpc-reply>
以上信息表明:目前有一個NETCONF連接,SessionID是1,登錄用戶類型vty0,登錄時間是2019-01-05T00:24:57,此用戶不持有鎖。
NETCONF支持一個用戶關閉除自己外的另一個NETCONF會話,被關閉會話的用戶退回到用戶視圖。
請將以下報文拷貝、粘貼到客戶端,用戶即能關閉指定的會話:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<kill-session>
<session-id>
指定session-ID
</session-id>
</kill-session>
</rpc>
設備收到會話關閉請求後會回應客戶端,當客戶端收到如下報文時,表示指定會話已經被關閉:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
當前有兩個NETCONF登錄用戶,session ID分別是1和2,session ID為1的用戶要關閉另一個用戶的會話。
# 進入XML視圖。
<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="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<kill-session>
<session-id>2</session-id>
</kill-session>
</rpc>
如果客戶端收到如下報文,則表明session ID為2的NETCONF會話已經被關閉。建立該會話的用戶會從XML視圖退回到用戶視圖。
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
對於處於XML視圖的用戶,要退回到用戶視圖,使用命令行來配置設備時,需要將以下報文拷貝、粘貼到客戶端:
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<close-session/>
</rpc>
設備收到以上請求後會返回如下報文並退回到用戶視圖:
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<ok/>
</rpc-reply>
開啟NETCONF的告警功能後,該模塊會生成告警信息,用於報告該模塊的重要事件。生成的告警信息將發送到設備的SNMP模塊,通過設置SNMP中告警信息的發送參數,來決定告警信息輸出的相關屬性。有關告警信息的詳細介紹,請參見“網絡管理和監控配置指導”中的“SNMP”。
表1-10 開啟NETCONF的告警功能
操作 |
命令 |
說明 |
進入係統視圖 |
system-view |
- |
開啟NETCONF的告警功能 |
snmp-agent trap enable netconf |
缺省情況下,NETCONF的告警功能處於開啟狀態 |
在完成上述配置後,在任意視圖下執行display命令可以顯示配置後NETCONF的運行情況,通過查看顯示信息驗證配置的效果。
在用戶視圖下,執行reset命令可以清除NETCONF的統計信息。
表1-11 NETCONF顯示和維護
操作 |
命令 |
顯示當前NETCONF服務的狀態及全局統計信息 |
display netconf service |
顯示當前NETCONF會話信息 |
display netconf session |
清除當前NETCONF服務的全局統計信息 |
reset netconf service statistics |
清除當前NETCONF會話的統計信息 |
reset netconf session statistics |
Comware V7平台對NETCONF標準協議做了一些修訂,刪除了不常用的操作,增加部分新的操作
【使用指導】
下發可配置的功能的動作,例如reset操作。
【XML格式樣例】
清除全部接口的統計信息,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>
【使用指導】
執行命令行的命令。
請求消息將命令行語句封裝在<CLI>標簽中,命令行輸出信息被封裝在<CLI>標簽中返回。
CLI支持Execution和Configuration方式執行命令行:
· Execution:在用戶視圖下執行命令行。
· Configuration:在係統視圖下執行命令行。
使用該方式時需要指定exec-use-channel的屬性:
¡ false:不使用channel方式執行命令行。
¡ true:使用臨時channel執行命令行,執行完成後,自動關閉該channel。
¡ persist:使用保留channel執行命令行。使用該方式時,則需要執行Open-channel操作打開當前對話的channel;使用完成後,執行Close-channel關閉Channel。
使用Configuration方式時可以指定error-when-rollback屬性(缺省值為false):
¡ true:表示<edit-config>操作的error-option參數值設置為rollback-on-error後,在配置回滾的狀態下,如果執行CLI操作會返回錯誤消息。
¡ false:表示<edit-config>操作的error-option參數值設置為rollback-on-error後,在配置回滾的狀態下,允許執行CLI操作。建議在回滾狀態下,不要執行CLI操作,否則配置效果不能確定。
· 對於其他視圖下命令,則需要在Configuration下先指定進入子視圖的命令,再指定配置命令。
一個NETCONF會話隻能打開一個保留channel,可以打開多個臨時channel。
如果沒有執行Open-channel操作,則係統將自動打開channel。
如果沒有執行關閉保留channel操作,再次使用保留channel時,係統在上次最後執行的命令行所在視圖再次執行命令行。
不支持執行交互式命令。
使用channel方式執行命令行時,不支持執行quit命令退出用戶視圖。
【XML格式樣例】
在係統視圖不使用channel方式執行vlan 3命令:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<CLI>
<Configuration exec-use-channel="false" error-when-rollback="true">vlan 3</Configuration>
</CLI>
</rpc>
【使用指導】
關閉當前NETCONF會話,並釋放鎖和這個session用到的內部資源(如內存等),退出XML視圖。
【XML格式樣例】
關閉當前NETCONF會話,並釋放鎖和這個session用到的內部資源(如內存等),退出XML視圖
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<close-session/>
</rpc>
【使用指導】
創建配置。
create操作必須指定配置對象。
· 如果當前配置表支持創建對象,且當前對象不存在,則先創建配置對象,再創建指定的配置。
· 如果配置對象下對應的配置項已經存在,則返回data-exist錯誤。
【XML格式樣例】
將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="create">
<LogBuffer>
<BufferSize>120</BufferSize>
</LogBuffer>
</Syslog>
</top>
</config>
</edit-config>
</rpc>
【使用指導】
刪除配置。
· 當指定的刪除對象中隻有表索引時,則刪除此配置指定對象的所有配置,同時刪除指定對象。
· 當指定的刪除對象中不僅僅有表索引還存在配置項時,則刪除此對象下麵的指定配置。
· 如果係統中指定對象不存在,則直接返回不存在的錯誤消息。
【XML格式樣例】
同edit-config: create,把create修改為delete即可。
【使用指導】
在當前運行配置的基礎上直接運行指定配置。
merge操作的XML數據格式和create類似,隻是operation屬性需要指定為“merge”。
merge操作必須指定具體的操作對象(行):
· 如果指定的對象存在,則直接配置該對象。
· 如果指定的對象不存在,但允許創建,則先創建再配置該對象。
· 如果指定的對象不存在且不允許創建,則返回merge失敗。
【XML格式樣例】
同edit-config: create,把create修改為merge即可。
【使用指導】
刪除配置。
· 當指定的刪除對象中隻有表索引時,則刪除此配置指定對象的所有配置,同時刪除指定對象。
· 當指定的刪除對象中不僅僅有表索引還存在配置項時,則刪除此對象下麵的指定配置。
· 如果係統中指定對象不存在,或者XML消息未指定對象,則直接返回成功。
【XML格式樣例】
同edit-config: create,把create修改為remove即可。
【使用指導】
替換配置。
· 如果指定的對象存在,則替換指定對象的配置為當前配置。
· 如果指定的對象不存在,但允許創建,則先創建再配置該對象為當前配置。
· 如果指定對象不存在且不允許創建,則不進行replace操作,返回invalid-value錯誤,提示用戶配置對象不存在。
【XML格式樣例】
同edit-config: create,把create修改為replace即可。
【使用指導】
執行edit-config操作時,可指定一個測試選項,使用<test-option>節點來決定當前配置是否下發。
該節點的缺省值為test-then-set,全部取值為:
· test-then-set:如果沒有錯誤則將配置設置到係統。
· set:將配置設置到係統。
· test-only:隻測試,並不下發配置到係統。語法檢查通過,就返回ok成功,否則失敗。
【XML格式樣例】
下發一個接口的配置,僅測試,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>
【使用指導】
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格式樣例】
下發一個空的操作,該操作僅僅驗證格式,並不真正下發給係統,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的過程中,如果遇到一個實例配置出錯,缺省情況下會直接返回錯誤,並提供錯誤選項,通過錯誤選項取值的不同,在發生錯誤的時候進行不同的處理操作。
<error-option>節點用於設置一個實例配置出錯後,後續實例配置的處理方式,缺省值為stop-on-error,全部取值為:
· stop-on-error:停止處理,返回錯誤。此選項為缺省選項。
· continue-on-error:繼續處理,但是報告錯誤。
· rollback-on-error:停止並回滾配置。
【XML格式樣例】
下發兩個接口的配置,當下發第一個接口的配置發生錯誤時,繼續進行下一個接口配置的下發,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>
【使用指導】
增量下發選項incremental放置在列上,對於類似vlan permitlist列表集合性質的列,可能支持增量下發,用戶請求XML中有增量下發選項時,最終執行結果不影響本列原有的數據。
增量下發隻支持edit-config,但不支持edit-config中的replace。
關於支持增量下發的模塊,請參見模塊對應的NETCONF XML API。
【XML格式樣例】
下發一個接口的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>
【使用指導】
獲取設備運行狀態和運行配置。
【XML格式樣例】
獲取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>
【使用指導】
從指定索引的下一條開始獲取N條運行狀態和運行配置(索引行數據不返回)。
用戶通過index屬性指定索引,通過count屬性指定N。如未指定索引,則以第一條為索引;如未指定N,或者數據表中符合條件的數據記錄不足N條,則返回表中所有剩下的數據條目。
get操作會返回所有符合條件的數據,在某些情況下會導致效率問題。get-bulk允許用戶從固定數據項開始,向後獲取指定條目的數據記錄。
【XML格式樣例】
獲取全部接口的數據的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操作相同。
【XML格式樣例】
獲取全部接口配置信息的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>
【使用指導】
獲取可配置的功能的變量值。如果對應功能未配置,則返回一個空的<data>。
【XML格式樣例】
獲取接口表內所有配置的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>
【使用指導】
獲取當前係統中所有NETCONF會話的信息(不能指定sessions-ID)。
【XML格式樣例】
獲取當前係統中所有NETCONF會話的信息:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-sessions/>
</rpc>
【使用指導】
關閉其他NETCONF會話。
該操作不支持關閉用戶自己的NETCONF會話。
【XML格式樣例】
關閉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>
【使用指導】
加載配置。
執行該操作後,指定配置文件中的配置被合並到當前運行配置中。
【XML格式樣例】
將文件a1.cfg中的配置合並到設備的當前配置中:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<load>
<file>a1.cfg</file>
</load>
</rpc>
【使用指導】
NETCONF加鎖操作將鎖定配置數據,即<edit-config>操作中指定配置數據,其他操作(例如<get>操作)不受鎖的限製。
用戶通過NETCONF加鎖操作鎖定NETCONF連接後,其他用戶既不能使用NETCONF執行下發配置操作,也不能通過CLI或SNMP等其他配置方式對設備進行配置。
【XML格式樣例】
禁止NETCONF會話修改設備的當前配置,XML請求如下:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lock>
<target>
<running/>
</target>
</lock>
</rpc>
【使用指導】
回滾配置。
該操作必須使用子元素<file>指定需要回滾的配置文件的名稱。
執行該操作後,當前運行配置回滾為指定配置文件中的配置。
【XML格式樣例】
將設備當前配置回退到文件1A.cfg中配置的狀態:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<rollback>
<file>1A.cfg</file>
</rollback>
</rpc>
【使用指導】
保存運行配置。
該操作可以使用子元素<file>來指定保存的配置文件名稱。當save操作中不存在子元素<file>列時,則設備會自動將當前運行配置保存到主用下次啟動配置文件中。
OverWrite屬性用來判斷當指定的配置文件名存在時,當前配置是否覆蓋原配置文件並保存成功。
Binary-only屬性用來隻保存當前使用的二進製配置文件。
Safely屬性用來以安全模式保存配置文件。
【XML格式樣例】
將設備當前配置保存到文件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>
【使用指導】
解鎖。
當會話結束時鎖也會被自動釋放。
【XML格式樣例】
取消鎖保護,允許NETCONF會話修改設備的當前配置:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<unlock>
<target>
<running/>
</target>
</unlock>
</rpc>
【使用指導】
查看XML報文對應的配置命令行。
執行該操作後,設備在回複報文中使用<cli>列來記錄XML報文轉化後的命令行。
【XML格式樣例】
查看GRPC/Configuration報文對應的配置命令行:
<rpc message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<xml2cli>
<GRPC>
<Configuration>
<State>enable</State>
<Port>50052</Port>
<IdleTime>25</IdleTime>
</Configuration>
</GRPC>
</xml2cli>
</rpc>
設備收到以上請求後,回複給客戶端的報文如下:
<?xml version="1.0">
<rpc-reply message-id="100" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<xml2cli>
<GRPC>
<Configuration>
<cli>grpc enable
grpc port 50052
grpc idle-timeout 25</cli>
<State>enable</State>
<Port>50052</Port>
<IdleTime>25</IdleTime>
</Configuration>
</GRPC>
</xml2cli>
</rpc-reply>
不同款型規格的資料略有差異, 詳細信息請向具體銷售和400谘詢。H3C保留在沒有任何通知或提示的情況下對資料內容進行修改的權利!