【正文】
ress消息更新系統(tǒng)中所有 Gal 設(shè)備的 MAC 地址表。 地址表的結(jié)構(gòu)完全由 GT 48350 控制并初始化。對地址表的修改通常在自學(xué)習(xí)過程中完成。 22 基于 WEB 的網(wǎng)管系統(tǒng)設(shè)計開發(fā) 實際上,對以太網(wǎng)接口的 MAC 地址的管理就是對各交換控制芯片中 MAC 表的讀寫操作。 但與端口狀態(tài)鏡像不同的是, MAC 地址表是會自動更新的。 綜上所述,通過對以太網(wǎng)交換芯片中的 MAC 地址表的讀寫操作,網(wǎng)管軟件實現(xiàn)的對 MAC 地址的管理內(nèi)容如下: ●靜態(tài) MAC 地址表項的建立與刪除 ; ●老化時間的設(shè)置 ; ●地址詢問操作 (包括對某個指定 MAC 地址的詢問,指定端口的詢問,指定VLAN 的 詢問 )。 利用 Rapid Control SDK 開發(fā)包,我們可以開發(fā)出一個支持多種管理方式和多種技術(shù)的綜合 網(wǎng)絡(luò)管理系統(tǒng),使 管理人員 可以 通過 Web 瀏覽器, Tel 遠(yuǎn)程登錄, Java 應(yīng)用平臺以及企業(yè)應(yīng)用平臺來管理設(shè)備。 Rapid Control SDK 支持基于 Web、基于命令行等 的 多種管理方式,并使它們以統(tǒng)一的方式訪問被管對象,這其中 最為 關(guān)鍵技術(shù)就是 Rapid Control Backplane( RCB),它 就 是整個軟件開發(fā)包的核心技術(shù)。 第 三 章 網(wǎng)管系統(tǒng)的設(shè)計開發(fā) 23 Rapid Control Backplane 是描述被管對象的數(shù)據(jù)庫,在這個數(shù)據(jù)庫 中包含了 所有 被管對象的相關(guān)信息,通過這個數(shù)據(jù)庫, 可以 將管理方式與對設(shè)備的具體操作相分隔開 ,統(tǒng)一了被管對象描述以及對它們的操作。這使得已經(jīng)開發(fā)了擁有 SNMP 管理代理服務(wù)的設(shè)備以最小的代價實現(xiàn)基于 Web 的管理。 Rapid Mark 和 RCB 技術(shù) Rapid Mark 和 RCB 技術(shù) 是開發(fā)包的核心部分。 Rapid Mark 和 RCB技術(shù) 主要是為了 實現(xiàn) HTML 頁面數(shù)據(jù)與設(shè)備數(shù)據(jù)的 之間的 關(guān)聯(lián) 。 所謂 的 方法就是一些函數(shù)指針,它們指向 了 對這些數(shù)據(jù)進(jìn)行操作的函數(shù)的入口地址,這些操作包括讀、寫以及校驗 函數(shù) 。而對設(shè)備上的數(shù)據(jù)進(jìn)行 讀寫操作 時 ,是在讀寫函數(shù)中調(diào)用設(shè)備的驅(qū)動代碼來完成的。 可以將 Rapid Mark 理解為一個數(shù)據(jù)單元,每一個被管對象由一個 Rapid Mark 來標(biāo)記。 只有用戶權(quán)限高于要訪問的 Rapid Mark 的訪問權(quán)限時才能對該 Rapid Mark 進(jìn)行讀寫訪問,獲取所需要的數(shù)據(jù)。 Rapid Mark 包括名稱、數(shù)據(jù)類型、訪問權(quán)限以及指向讀寫例程的指針等內(nèi)容。 瀏覽器所 提交的任何信息都以文本字符串的形式傳 遞 給管理程序,客戶端看到的 Web 頁面的 顯示結(jié)果也一定是字符的形式。因此 設(shè)計的程序中必須有 格式轉(zhuǎn)換的操作。 當(dāng)設(shè)備上對應(yīng)于該 Rapid Mark 的相應(yīng)寄存器的數(shù)值發(fā)生變化時, HTML第 三 章 網(wǎng)管系統(tǒng)的設(shè)計開發(fā) 25 頁面上用來顯示這個 Rapid Mark 的表單元素的 VALUE 也 應(yīng)隨之做 相應(yīng)的改變。 Rapid Mark 實際 上 就是設(shè)備上被管對象 的統(tǒng)一的抽象元素,而記錄 Rapid Mark及其相關(guān)信息的 Rapid Control Backplane 實際上就是 設(shè)備的管理信息庫。 管理信息庫 的構(gòu)建 就 意味著 確 定 了設(shè)備的被管對象。 /* 數(shù)據(jù)在結(jié)構(gòu)體中的地址 */ } DataBaseEntry; RCB( Rapid Control Backplane)是一個主機(jī)上的在線數(shù)據(jù)庫, 這個 數(shù)據(jù)庫 儲存了系統(tǒng)中所有 Web 頁面的信息以及其他各類資源的信息。 RCB 對于不同的管理接口有著統(tǒng)一的管理框架,并且可以提高系統(tǒng)的安全性能。 [8] 但是, 用 Rapid Mark 來標(biāo)識的設(shè)備數(shù)據(jù)是動態(tài)變化 的, 即 Rapid Mark 的內(nèi)容26 基于 WEB 的網(wǎng)管系統(tǒng)設(shè)計開發(fā) 是動態(tài)的,但 Rapid Mark 只是實際數(shù)據(jù)的映像,它指向數(shù)據(jù)存儲的地址,并 非數(shù)據(jù)本身。因此, RCB 只 是一個靜態(tài)的數(shù)據(jù)庫,它存儲的是設(shè)備上一些數(shù)據(jù)的映像條目,而非實際數(shù)據(jù),一旦被初始化, RCB 的內(nèi)容不會改變。操作例程包括了對被管對象的讀寫函數(shù)以及其他的 一些輔助功能函數(shù),這些構(gòu)成了膠合代碼( Glue Code)的全部內(nèi)容。這樣,當(dāng)用戶提交一個 HTTP 請求,請求查看或者更改設(shè)備上的數(shù)據(jù)時,由于 Rapid Mark 與設(shè)備數(shù)據(jù)之間的關(guān)聯(lián), 就可以 訪問設(shè)備上的實際數(shù)據(jù)。 另外, Rapid Mark 還有一個特性,就是它 可以放在 任何 普通的 HTML 代碼中,可以放在隱藏的標(biāo)簽中, 也可以是超級鏈接的一 部分,甚至可以放在一些 JavaScript 代碼中。 由于 對各類寄存器的操作是通過對這些寄存器 的 鏡像 的操作來實現(xiàn)的, 因此,我們只需要將 鏡像 的內(nèi)容與 Rapid Mark 進(jìn)行關(guān)聯(lián) 就可以實現(xiàn)各種操作內(nèi)容 。 Rapid Control 的 Web 組件 [8] Rapid Control for Web( RCW) 組件是 集成到嵌入式系統(tǒng)的 軟件部分。 RCW 組件提供了功能強(qiáng)大的基于 Web 方式的網(wǎng)絡(luò)管理系統(tǒng)。典型的嵌入式系統(tǒng)主要有實時操作系統(tǒng)( RTOS)和私有代碼,即為設(shè)備的專用代碼。而私有代碼具體實現(xiàn)設(shè)備的特有的功能和特點。其中 RCB技術(shù)在上一節(jié)已介紹,用于提供設(shè) 備底層驅(qū)動代碼和設(shè)備管理應(yīng)用程序之間的運行時的聯(lián)接,將設(shè)備的特性抽象為統(tǒng)一的元素進(jìn)行管理,實質(zhì)上就是設(shè)備的專用第 三 章 網(wǎng)管系統(tǒng)的設(shè)計開發(fā) 27 信息庫。 私 有 代 碼S N M P A g e n t膠 合 代 碼M I B w a y I n t e r f a c e R o u t i n e sR C BR a p i d C o n t r o l f o r W e bC G I G e t H a n d l e rC G I P o s t H a n d l e rS M T PH T T P 1 . 0 / 1 . 1操 作 系 統(tǒng) 抽 象 層實 時 操 作 系 統(tǒng) 圖 Rapid Control 的 Web 組件的軟件結(jié)構(gòu) ( 1)操作系統(tǒng)抽象成就是將網(wǎng)絡(luò)堆棧操作的代碼與不同的操作系統(tǒng)進(jìn)行分隔,以便軟件可以跨平臺運行。這兩個源文件一定要包含到 VC 工程 中去 。 ( 2) The Web Server 包含一套 CGI 的處理程序( GET Handler 和 POST Handler), 包含了實現(xiàn)公共網(wǎng)關(guān)接口的相關(guān)例程。 G E T E n g i n eR a p i d C o n t r o l B a c k p l a n eP O S T E n g i n eR a p i d C o n t r o l O p e r a t i n g S y s t e mH T T P R e q u e s t H T T P R e p o n s eH T T P S e v e r 圖 Web Server 的系統(tǒng)架構(gòu) 28 基于 WEB 的網(wǎng)管系統(tǒng)設(shè)計開發(fā) 另外 Rapid Control for Web 組件 還有符合 RFC2068 要求的 程序。 在HTML 語句中,一對特 定 的符號(“ $%”和“ $”)之間的字符串并不是一個普通的 HTML 代碼字符串, “ $%” 表示其后是一個 Rapid Mark,“ $”是 該 Rapid Mark的結(jié)束標(biāo)記。 例如 下面這句 HTML 語句存在于一個名為 的文件中: input type=text name=username value=$%username$ 該 HTML 語句 用于用戶登錄 時輸入用戶名,其中 變量類型為 單行文本框 text,變量名為 username。在上面這個例子中,除了一個特別的 VALUE 域 表示 Rapid Mark 之外 ,上面的代碼與標(biāo)準(zhǔn)HTML 代碼基本相同 。若文件存在 ,則 會從設(shè)備的文件系統(tǒng)中 下載該文件到服務(wù)器中的一個用于對 CGI 數(shù)據(jù)流進(jìn)行處理的 Get 函數(shù)中, 如 圖 所示: 第 三 章 網(wǎng)管系統(tǒng)的設(shè)計開發(fā) 29 操 作 系 統(tǒng) 抽 象 層R C BM I B w a y I n t e r f a c e R o u t i n e s膠 合 代 碼C G I G e t H a n d l e rC G I P o s t H a n d l e rS N M P A g e n t文 件 存 儲 區(qū)M y f i l e①②③實 時 操 作 系 統(tǒng)R a p i d C o n t r o l f o r W e bS M T PH T T P 1 . 0 / 1 . 1私 有 代 碼 圖 位于嵌入式設(shè)備上的 Web 服務(wù)器處理 Get 請求的工作流程 然后, 這個 Get 函數(shù)對 HTML 文件中的每個 字符進(jìn)行解析,直到遇到“ $%” ,Get 函數(shù)會停止對該文件的解析,轉(zhuǎn)而在 RCB 中查找“ $%” 和“ $”之間的內(nèi)容。 如 圖 中的表項 : userN am e“ 讀 ” 函 數(shù) 指 針“ 寫 ” 函 數(shù) 指 針 圖 RCB 中的 userName 表項 通過“讀例程”的函數(shù)指針,在“讀例程” 訪問設(shè)備的底層代碼,得到 username的相關(guān)數(shù)據(jù)。通過“讀函數(shù)”的返回值,再把輸出緩沖區(qū)中的數(shù)據(jù)復(fù)制到 HTML 頁面。 ● 提交( POST)機(jī)制 提交機(jī) 制就是 發(fā)送頁面中的表單值,并向服務(wù)器發(fā)送一個提交請求。 [9] 這個 CGI 流在被嵌入式 Web 服務(wù)器收到后被傳遞給了 CGI Post 處理函數(shù)中,然后由 Post 函數(shù)來解析 CGI 流。該表項與前 面 GET操作所獲得表項是相同的,如 圖 所示 。 綜上所述,通過將 HTML 文件中的 Rapid Mark 與表單元素的名稱相匹配,相同的數(shù)據(jù)庫表項就可以用于“讀”“寫”兩個方向的操作。因此,設(shè)計這個設(shè)備網(wǎng)管軟件的關(guān)鍵就是如何將 Rapid Mark 與表單元素連接在一起,使 Web 服務(wù)器對表單元素進(jìn)行處理,進(jìn)而訪問到 Rapid Mark以及與之相關(guān)的讀寫例程。當(dāng)用戶提交表單時,表單的 內(nèi)容就發(fā)送至 Web 服務(wù)器,由服務(wù)器負(fù)責(zé)處理提交的信息。比如說一個網(wǎng)頁上有多個表單,各個表單內(nèi)容不相同,而每個表單上都有一個用于提交的按鈕,當(dāng)我們單擊提交鍵來請求提交我們的網(wǎng)頁時,只有我們點擊的這個按鈕所在的表單中的內(nèi)容才會被 Web 服務(wù)器處理,而第 三 章 網(wǎng)管系統(tǒng)的設(shè)計開發(fā) 31 其他表單中的內(nèi)容不會被提交,因此不會被服務(wù)器處理,這樣就大大地減輕了服務(wù)器數(shù)據(jù)處理的負(fù)擔(dān)。單行文本框 text、密碼框 password、提交域 submit、復(fù)位域 reset、 隱藏域 hidden、 單選按鈕 radio、 復(fù)選框 checkbox 和 按鈕 button 等都是常用的 HTML 表單( FORM)元素。并且在 HTML 語言中都有自己的屬性,比如 TYPE, NAME,VALUE 等。 另外,設(shè)計 HTML 頁面上的表單元素其中一個重要的原則就是與用戶交互的易用性,即用什么樣的表單元素來表達(dá)這個變量從而使用戶更易于 接受,并且便于信息的傳遞。 MIBway 介紹 [10] Rapid Control 的 MIBway 機(jī)制是為 RCB 與 SNMP 代理之間架起了一道橋梁。 MIBway 它本身是一個庫文件的集合,用于處理來自 RCB 的特定請求。 MIBway 主要包含了以下兩個部分: ( 1) MIBway 的“桶”墻機(jī)制,用于接收處理所有在 RCB 中沒有記錄的 Rapid Mark; ( 2) 為了對 SNMP 表格變量進(jìn)行 操作, MIBway 提供了一些稱為 metaRapid Mark 的特殊的 Rapid Mark,并為這些 meta— Rapid Mark 提供了相應(yīng)的操作例程,用于處理復(fù)雜的 SNMP 表格。 下面介紹一下 MIBway 的工作流程: ● 對標(biāo)量 MIB 對象的操作 首先,定義了一個名字為 sysName 的 Rapid Mark,并且,假定我們想要利用己開發(fā)的 SNMP 管理例程而不是重新為它書寫讀寫操作例程。前面我們提到過,在 RCB 中只儲存非 SNMP 類型的 Rapid Mark, CGI 程序在對 RCB 進(jìn)行查詢時,正是以此為依據(jù)來判斷 Rapid Mark 的管理例程是否使用 SNMP 的管理例程的。 再假定 HTML 文件 中有如下 HTML 語句: INPUT Type=text Size=20 Name=sysName Value=$% sysName$ 如前所述,這是一個描述單行文本輸入框的表單元素,用于讓終端用戶讀寫數(shù)