趙苗苗,陳 鵬,顏昌隆
(1.武漢郵電科學研究院,湖北武漢 430074;2.烽火通信科技股份有限公司,湖北武漢 430074)
伴隨著大數據和各類云服務的爆炸式增長,數據中心互聯設備應運而生[1-2],該設備種類繁多,且分別提供不同的配置命令,傳統的CLI(命令行界面)網絡管理方式對管理人員和用戶要求比較高,無法滿足數據中心網絡的運維要求,該文提出了基于GoAhead 嵌入式Web 服務器的網絡管理架構,這種基于Web 的網絡管理系統通過標準的網絡瀏覽器就可以對設備進行訪問,可以有效地顯示網絡管理數據,提高了網絡管理效率[3-6]。該文重點介紹了嵌入式Web 網絡管理系統中JSON(Javascript Object Notation)與命令行的適配機制及實現,選擇JSON 作為AJAX(Asynchronous Javascript And Xml)的數據傳輸格式,有效地提高了傳輸效率[7-11]。基于該機制實現了設備數據的可視化,讓系統具有移植性和擴展性,對于不同配置命令的設備可實現個性化定制,開發簡單、便于維護。
該軟件系統主要由Webclient 模塊、GoAhead Webserver模塊、CLI模塊及底層Interface Service 等各項業務和協議模塊組成,實現了嵌入式Web 網管系統的基本功能,其架構如圖1 所示。

圖1 嵌入式Web網絡管理系統架構
該軟件系統采用了異步AJAX 技術,客戶端可以在不更新加載整個頁面的情況下與服務器交換數據,并更新部分網頁,從而可以較好地同步交互造成的響應慢的問題。AJAX 的核心對象是XmlHttpRequest,通過XmlHttpRequest 對象,瀏覽器的JavaScript 可以后臺與服務器交換數據,無需等待服務器的響應[12-13]。因此,在服務器和瀏覽器之間交換的數據大量減少,大大提高了頁面的響應速度。
用戶在客戶端通過瀏覽器(例如Google Chrome、Mozilla Firefox 等)對目標設備進行訪問,通過在地址欄輸入設備的IP(Internet Protocol,網際互連協議)地址,Webserver 將設備的配置頁面信息通過HTTP(Hypertext Transfer Protocol,超文本傳送協議)傳送到Web 瀏覽器,然后顯示在用戶終端;用戶使用時在相應的配置頁面進行參數配置操作,當用戶在Web 瀏覽器配置界面中輸入數據時,先由JavaScript 程序對其進行預處理,檢查輸入數據是否符合要求,對于不符合要求的數據,在前臺頁面進行返錯提示;Web 服務器執行ASP(Active Server Page)過程、GoForms 過程實現接口,獲取待查詢的或者配置的JSON 數據;通過映射文件將JSON 數據轉換成命令行,用于查詢數據或處理用戶設置,其中使用CLI 組件提供的IPS(Inter Process Signal,進程間信號消息)接口與CLI 模塊交互,并且CLI 與業務模塊之間不感知HTTP 數據;將查詢結果或處理結果以HTTP 響應的方式返回給頁面,當請求返回時,客戶端使用JavaScript 來更新相應的用戶界面。
該軟件系統的適配模塊主要是由AJAX Actions解析器、映射文件以及CLI 模塊組成,AJAX Actions解析器負責解析和組裝前臺頁面發送的JSON 格式數據,通過映射文件interface_map.xml 將JSON 格式數據轉換為對應的CLI 命令行字符串,然后下發到CLI 模塊,并將CLI 模塊回復的操作結果發送到前臺頁面進行解析與響應。該方案能夠有效地提高Web網管系統的數據傳送和處理效率,減少客戶端的請求和響應時間。
JSON 與CLI 命令行的映射過程如下:
1)在climap.js文件中定義了一個對象configObj,用來與命令行進行映射,該對象支持set、show、no 等方法;
2)根據funName 查找映射文件interface_map.xml對應的id,并獲得對應的CLI 命令行字符串,其中,interface_map.xml 文件的參數說明如表1 所示。

表1 映射文件參數說明
配置操作流程如圖2 所示。

圖2 配置操作流程
如圖2 所示,用戶在配置設備時,首先在Web 前端配置頁面完成設備參數的配置,點擊提交按鈕,用一個按鍵函數submitForm 來觸發AJAX 數據請求,這個過程使用configObj 對象的set 方法,以CallHome配置為例:
configObj.set("set_callhome","callhome","");
根據funName 和id 找到映射文件interface_map.xml中對應的CLI 命令行字符串:
<set funName="set_callhome">
<mo2cli_entry id="callhome" mode="CONFIG_M ODE" cliName="netconf-ch-ssh" cat-id="ip" cat=""/></set>
取出字符串并以JSON 鍵值對的形式存放在cli.array 數組中:
"cli_array":[{type:"set",cli:"config terminal net conf-ch-ssh "}]
通過POST 請求把JSON 數據發送到webs2cli_uniform_interface 接口,后臺解析JSON 字符串并下發到CLI 模塊,命令行執行完之后返回響應,由handle_config_result 函數處理返回的響應,配置錯誤時后臺返回錯誤提示數據給前臺頁面,配置成功則調用show 命令刷新前臺頁面,前臺解析并顯示配置數據。
如圖3 所示,用戶在Web 前端點擊查詢功能頁面,頁面首先調用initTable 函數初始化表格,在show_config_info 函數中實現show 命令的轉換。

圖3 查詢操作流程
以CallHome 查詢功能為例,使用configObj 的show 方法:
configObj.show("show_callhome","show_callhome","");
根據funName 和id 找到映射文件interface_map.xml中對應的CLI 命令行字符串:
<show funName="show_callhome">
<mo2cli_entry id="show_callhome" mode="CON FIG_MODE" cliName="debug show netconf-ch-ssh"cat=" ; ;"/></show>
因為JSON 不能識別/r/n,故用其實體 ; 來表示。從而獲得對應的CLI命令行字符串:
"cli_array":[{"type":"get","cli":"debug show netco nf-ch-ssh "}]
通過AJAX 請求將命令行下發后,后臺返回的是字符串,此時webs2cli_uniform_interface 接口提供通道作用,handle_show_info 函數負責解析,將字符串解析成JSON 類型數組并返回給前臺頁面,前臺HTML 頁面負責用戶界面的組織及數據格式化的輸出。
該軟件系統選擇JSON 作為AJAX 的數據傳輸格式,同時選取cJSON 作為JSON 的封裝和解析庫。cJSON 是一個開源、簡潔、功能全面的JSON 封裝/解析器。JSON 與命令行模型適配過程中使用的接口函數如下:
1)JSON 數據包解析接口
cJSON*cJSON_Parse(const char*value)
用于解析JSON 數據包,并按照cJSON 結構體的結構序列化整個數據包,其中的參數是JSON 鍵值對字符串。
2)JSON 對象遍歷接口
char*cJSON_Print(cJSON*item)
用于將創建好的cJSON 對象封裝成字符串形式的JSON 數據,并打印出來,其中的參數是cJSON 結構數據。
3)查找指定的JSON 對象接口
cJSON*cJSON_GetObjectItem(const cJSON*const object,const char*const string);
用于解析cJSON 結構體中指定名稱的JSON 對象,返回JSON 格式數據,其中第一個參數是cJSON結構數據,第二個參數是指定的JSON 對象名稱。
4)查找JSON數組中指定索引的JSON對象接口
cJSON*cJSON_GetArrayItem(const cJSON *array,int index);
用于解析cJSON 數組中指定名稱的JSON 對象,返回JSON 格式數據,其中第一個參數是cJSON 數組,第二個參數是待查找的JSON 對象的索引。
上述接口實現了JSON 數據的封裝和解析,通過webs2cli_uniform_interface 接口調用實現,JSON 支持嵌套,即一個JSON 格式中,允許再嵌套一個JSON 格式的數據,理論上支持無限層次的JSON 嵌套[14-16]。
該文以CallHome 配置和查詢功能為例來說明管理軟件系統的測試。CallHome 是一種常用的Netconf 設備,主動連接控制器的配置選項。
1)測試工具:Google Chrome/Secure CRT Portable 7.0.4。
2)測試設備:數據中心互聯設備。
將測試設備與PC 端連接,通過軟件Secure CRT Portable 對測試設備進行訪問,瀏覽器登錄設置連接的IP 地址即可訪問測試設備。通過下面的測試用例來測試該功能的可用性:
1)在瀏覽器的CallHome 配置頁面中執行配置下發操作,在CLI 中觀察其效果是否一致;
2)在CLI 中用命令行的方式執行配置下發操作,觀察是否在Web 頁面中能夠同步顯示。
如圖4 所示,在Web 頁面根據參數要求填寫CallHome 的控制器IP 地址及端口,填寫完成后,點擊新增按鈕,頁面顯示配置成功提示,并且頭部列表上顯示剛剛新增的配置數據,這里默認網絡類型為公網且值為1。然后在CLI 界面通過debug show netconfch-ssh命令來查詢,結果顯示與Web頁面一致。如圖5所示,在CLI界面通過命令行方式配置控制器IP地址、端口及網絡類型(私網:CTVPN193),配置下發后通過命令行查詢方式,得到顯示結果與Web頁面相同。

圖4 Web頁面配置查詢功能測試展示圖

圖5 CLI界面配置查詢功能測試展示圖
通過上述測試結果可得出如下結論:
1)Web 網管和傳統的CLI 網管在功能上可實現同步,操作結果完全一致,均能滿足用戶的要求;
2)Web 網管方式操作簡單易上手,數據直觀,擁有更好的用戶體驗。
該文介紹了一種基于GoAhead 的嵌入式Web 網管系統的實現架構,并重點介紹了該軟件系統中JSON 與命令行的適配機制與實現,基于此,可以根據不同客戶的需求實現不同設備管理系統軟件的快速定制和開發。針對不同嵌入式設備和不同的業務需求,只需要根據設備的配置命令,修改映射文件和底層的封裝接口,即可將該方法成功應用到新的管理系統中,開發簡單、便于維護,有效降低了嵌入式設備的運行和維護成本,提高了Web網管系統的開發和維護效率。