【正文】
當(dāng) Web 服務(wù)器收到對(duì) 。也就是說(shuō), sysName 這個(gè) Rapid Mark 表項(xiàng)在 RCB 中并不存在。于是,在對(duì) Rapid Mark 設(shè)計(jì)進(jìn)行設(shè)計(jì)的時(shí)候,將它的數(shù)據(jù)類(lèi)型設(shè)為 SNMP 變量。 MIBway 為已有的 MIB 對(duì)象建立 Rapid Mark,并將它的數(shù)據(jù)類(lèi)型設(shè)為“ MIB32 基于 WEB 的網(wǎng)管系統(tǒng)設(shè)計(jì)開(kāi)發(fā) 變量 ” ,當(dāng)檢索到的 rapid mark 為 MIB 類(lèi)型時(shí),按照名稱找到對(duì)應(yīng)的 OID,并按照本地 SNMP Agent 需要的格式構(gòu)建 PDU 數(shù)據(jù)包,然后調(diào)用 SNMP Agent 的 PDU處理例程得到結(jié)果。它含有一個(gè) SNMP 協(xié)議棧抽象層,使其可以與不同的 SNMP協(xié)議棧配合使用;格式轉(zhuǎn)換例程,將各種類(lèi)型數(shù)據(jù)轉(zhuǎn)換為字符格式便于顯示輸出;以及支持 SNMP 高級(jí)操作 (如 SNMP 表操作 )的邏輯。通過(guò) MIBway 技術(shù), RCB 可以直接通過(guò)系統(tǒng)中的 SNMP 代理操作被管對(duì)象,從而減少了管理例程代碼的開(kāi)發(fā)量。當(dāng)用戶需要輸入數(shù)字、字符等信息時(shí),并以文本的格式顯示不同的內(nèi)容,可以用文本框來(lái)描述這個(gè)變量,這樣用戶可以在文本域輸入文本;當(dāng)用戶需要表示的變量是個(gè)枚舉值時(shí),可以用下拉列表框或者是一組單選框來(lái)描述它,下拉列表框中的每個(gè)選項(xiàng)或者單選框組中的每個(gè)選項(xiàng)也就對(duì)應(yīng)著設(shè)備數(shù)據(jù)的每個(gè)枚舉值;當(dāng)用戶確認(rèn)或提交表單中的內(nèi)容時(shí),可以用一個(gè)提交域 submit 來(lái)表示。我們要利用這些元素的屬性,在程序中實(shí)現(xiàn)參數(shù)傳遞。這些表單元素實(shí)質(zhì)上是一些變量,變量名在 NAME 域中指定,變量值在VALUE 域中指定。 表單元素是用來(lái)收集訪問(wèn)者輸入的信息,從而實(shí)現(xiàn)網(wǎng)站與用戶的信息交互。但當(dāng)我們向服務(wù)器提交含有表單的網(wǎng)頁(yè)時(shí),在表單之外的表單元素不會(huì)被 Web 服務(wù)器處理的。 表單是容納表單元素的簡(jiǎn)單容器,表單元素是為了網(wǎng)頁(yè)的交互性而設(shè)計(jì)的,服務(wù)器通過(guò)表單獲得用戶提交的信息,用戶也可以從表單元素顯示的值來(lái)獲取某種信息。 用 HTML 表單元素描述設(shè)備上的數(shù)據(jù) Rapid Mark和 RCB技術(shù)將設(shè)備上的動(dòng)態(tài)變化的數(shù)據(jù)與 HTML頁(yè)面上的數(shù)據(jù)關(guān)聯(lián)在一起的,而 Web 服務(wù)器對(duì)于 HTML 頁(yè)面的處理又是通過(guò)對(duì) HTML 表單對(duì)象的處理來(lái)完成的。 私 有 代 碼R a p i d C o n t r o l f o r W e b操 作 系 統(tǒng) 抽 象 層R C BM I B w a y膠 合 代 碼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 M T PH T T P 1 . 0 / 1 . 1S N M P A g e n tM I B實(shí) 時(shí) 操 作 系 統(tǒng)①②③H T T P P O S TC G I 流 圖 位于設(shè)備上的 HTTP 服務(wù)器處理 POST 請(qǐng)求的工作流程 這樣, Post 函數(shù)就獲得了指向?qū)υ?Rapid Mark 進(jìn)行寫(xiě)操作例程的函數(shù)指針,通過(guò)以新的變量值為參數(shù)調(diào)用“寫(xiě)”例程,設(shè)備底層代碼中相應(yīng)的數(shù)據(jù)得到修改。當(dāng)它解析到 username 是一個(gè) Rapid Mark 后, Post30 基于 WEB 的網(wǎng)管系統(tǒng)設(shè)計(jì)開(kāi)發(fā) 函數(shù)開(kāi)始在 RCB 中查詢 username 并獲得相應(yīng)讀寫(xiě)函數(shù)例程。當(dāng)一個(gè)用戶修改了該文本框中的內(nèi)容,并點(diǎn)擊提交按鈕時(shí), Web 瀏覽器向 Web 服務(wù)器發(fā)回HTTP POST 消息,其中加載著 CGI 數(shù)據(jù)流(表單上的所有的信息), CGI 數(shù)據(jù)流中包含著被提交的變量名稱與新的變量值。最后, Get 函數(shù)在對(duì) HTML 文件進(jìn)行這種 Rapid Mark 的替換之后,將 HTML 文件通過(guò) HTTP 服務(wù)器發(fā)送給 Web 瀏覽器,從而在瀏覽器中顯示結(jié)果。通過(guò)某種轉(zhuǎn)換和處理后,將獲取的數(shù)據(jù)存放在“讀函數(shù)”的輸出緩沖區(qū)中。在這個(gè)例子中, 也就是在 RCB 中查找名字為 username 的 Rapid Mark,并 獲得 了其讀寫(xiě)函數(shù)例程。 當(dāng)用戶通過(guò) Web 瀏覽器訪問(wèn)對(duì)應(yīng)于 的 URL 時(shí),相當(dāng)于 對(duì)設(shè)備發(fā)出一個(gè) HTTP 的“ GET”請(qǐng)求,如 圖 所示 : W e b 瀏 覽 器H T T P G E TM y f i l e . h t m圖 瀏覽器用戶訪問(wèn)位于嵌入式設(shè)備上的 Web 文件 Web 服務(wù)器 首先會(huì) 對(duì) URL 進(jìn)行解析,并在設(shè)備的文件系統(tǒng)中查找該文件。單行文本 框在基于 Web 的管理中是一個(gè)很 常用的元素,使用戶可以通過(guò)瀏覽器讀取或修改特定的字符串(如設(shè)備名、 IP 地址)。 這樣,當(dāng) Web Server 從 CGI 流中解析到這對(duì)符號(hào)時(shí),就會(huì)意識(shí)到 這對(duì)符號(hào)之間的字符串是一個(gè)變量的訪問(wèn)入口,而不是一個(gè)簡(jiǎn)單的需要顯示的文本字符串。 Web Server 有兩個(gè)主要的工作 機(jī)制 : ● 獲取 (GET)機(jī)制 獲取機(jī)制就是 向服務(wù)器發(fā)送獲取表 單的要求,并從服務(wù)器上獲取數(shù)據(jù)。 CGI 還定義了 HTTP 服務(wù)器和它的輔助程序之間數(shù)據(jù)交換方 式的標(biāo)準(zhǔn)。 通過(guò)操作系統(tǒng)抽象層的調(diào)用此操作系統(tǒng)相對(duì)應(yīng)的文件代碼,就可以對(duì)設(shè)備的代碼操作。 它對(duì)每一種操作系統(tǒng)都編寫(xiě)了兩個(gè)文件,其中一個(gè)是,定義了一系列系統(tǒng)服務(wù)的包裹函數(shù)( wrapper functions)供 Rapid Control for Web 組件進(jìn)行系統(tǒng)調(diào)用;另一個(gè)是 ,包含一個(gè)網(wǎng)絡(luò)連接服務(wù)程序,用來(lái)建立必要的 HTTP 連接線程以處理收到的請(qǐng)求。是對(duì)不同的設(shè)備需求而構(gòu)建的被管元素機(jī)器相關(guān)信息的數(shù)據(jù)庫(kù)。 Web 組件包含操作系統(tǒng)抽象層、 The Web Server 和 RCB 三個(gè)部分。實(shí)時(shí)操作系統(tǒng)為整個(gè)系統(tǒng)提供底層的服務(wù),如內(nèi)存管理、網(wǎng)絡(luò)連接以及進(jìn)程管理等。利用 RCW 可以十分簡(jiǎn)易的將基于 Web 的管理功能集成嵌入進(jìn)設(shè)備之中。 Rapid Control 的 Web 組件 就是圖 中 的 深 灰色部分 。 而且管理接口與設(shè)備代碼的平行開(kāi)發(fā),還可以縮短開(kāi)發(fā)的周期。一個(gè) HTML 頁(yè)中可以存在多個(gè) Rapid Mark,它們按照在 CGI 流中被 Web Server 解析的順序,依次執(zhí)行讀取操作。 調(diào)用數(shù)據(jù)的讀取寫(xiě)入將上述的結(jié)果以數(shù)據(jù)類(lèi)型的轉(zhuǎn)換成為字符形式返回。 總之, Rapid Mark 將設(shè)備上需要訪問(wèn) 的數(shù)據(jù)進(jìn)行某種數(shù)據(jù)類(lèi)型的抽象,抽象為 HTML 頁(yè)面上對(duì)于用戶可以識(shí)別的元素。當(dāng)訪問(wèn) Rapid Mark 時(shí),通過(guò)查詢 RCB 找到與之相關(guān)聯(lián)的讀寫(xiě)例程 函數(shù) ,從而 實(shí)現(xiàn) 對(duì)設(shè)備數(shù)據(jù)進(jìn)行讀寫(xiě)操作。 當(dāng)設(shè)備上的 某一數(shù)據(jù)發(fā)生變化時(shí),對(duì)這一數(shù)據(jù)的讀取操作并不會(huì)發(fā)生改變??傊ㄟ^(guò) RCB 技術(shù),實(shí)現(xiàn)了 設(shè)備上的數(shù)據(jù)與 HTML 顯示的表單元素 相 關(guān)聯(lián)。其實(shí) RCB 是一個(gè) Rapid Mark 的數(shù)據(jù)庫(kù), 存放了所有的 Rapid Mark 以及其相關(guān)讀寫(xiě)函數(shù)的信息。 下面給出 Rapid Mark 的數(shù)據(jù)結(jié)構(gòu): typedef struct DataBaseEntry /* (basename: dbe) */ { sbyte *pName; /* RapidMark 的名稱 */ Access Permissions; /* 存取權(quán)限 */ Access UserLevelRead; /* 讀權(quán)限級(jí)別 */ Access UserLevelWrite; /* 寫(xiě)權(quán)限級(jí)別 */ DataType iDataType; /* 數(shù)據(jù)的數(shù)據(jù)類(lèi)型 */ void *pDataObject; /* 數(shù)據(jù)的存儲(chǔ)地址 */ int (*p_funcValid) (struct environment *, void *); /* 校驗(yàn)例程函數(shù) */ void (*p_funcRdPrim)(struct environment *, void *, void *, char *); /* 數(shù)據(jù)讀取例程函數(shù) */ int (*p_funcWrPrim)(struct environment *, void *, void * ); /* 數(shù)據(jù)存儲(chǔ)例程函數(shù) */ StrcDes *p_sdrObject; /*數(shù)據(jù)所在結(jié)構(gòu)體的描述結(jié)構(gòu)體的地址 */ Counter OffsetIntoStruct。因此, 設(shè)計(jì) Rapid Mark 首先是對(duì)管理信息庫(kù)的構(gòu)建,然后用 Rapid Mark 來(lái)表示管理信息庫(kù)中的每一個(gè)對(duì)象。這樣當(dāng)在程序中對(duì)這個(gè) Rapid Mark 所 儲(chǔ)存的數(shù)據(jù)進(jìn)行讀取和操作之后,操作后的結(jié)果就會(huì) 同時(shí) 反映到 HTML 頁(yè)面上。 圖 Rapid Mark 的設(shè)計(jì) 最后 還需要將 這個(gè) Rapid Mark 分別與設(shè)備上寄存器的數(shù)據(jù)和 HTML 表單對(duì)象相關(guān)聯(lián)。 但是 設(shè)備上的數(shù)據(jù)大 都 是以二進(jìn)制形式 存儲(chǔ)傳遞的 ,因而 使用 一個(gè)二進(jìn)制數(shù)據(jù)與可 識(shí)別文本 之間 相互轉(zhuǎn)換的問(wèn)題。 訪問(wèn)方式分為直接訪問(wèn)和調(diào)用“讀寫(xiě)”例程兩種。訪問(wèn)權(quán)限必須是整數(shù)值,有 15三級(jí)。 訪問(wèn)權(quán)限是 Rapid Control 為設(shè)備管理提供的一種安全管理機(jī)制,可以通過(guò)對(duì)每個(gè) Rapid Mark設(shè)置不同的訪問(wèn)權(quán)限數(shù)值來(lái)限制不同級(jí)別用戶對(duì)這 個(gè) Rapid Mark 所代表的設(shè)備資源的訪問(wèn)。 [8] 一個(gè) Rapid Mark 的名稱來(lái) 表 示 一個(gè) 需要管理 的設(shè)備上的數(shù)據(jù)。當(dāng)對(duì) Rapid Mark所對(duì)應(yīng)的設(shè)備上 的 被管元素進(jìn)行讀寫(xiě)操作時(shí),實(shí)際上是調(diào)用這個(gè) Rapid Mark 相應(yīng)24 基于 WEB 的網(wǎng)管系統(tǒng)設(shè)計(jì)開(kāi)發(fā) 的函數(shù)指針?biāo)赶虻淖x寫(xiě)函數(shù)。 Rapid Mark 是對(duì)主 機(jī)上某 些 特定 的 數(shù)據(jù)所做的抽象 標(biāo)志 ,標(biāo)志中記錄了數(shù)據(jù)的屬性和方法,并且代替任何類(lèi)型的數(shù)據(jù) 。 RCB 是管理接口部分和管理功能實(shí)現(xiàn)部分的中間層,相當(dāng)于被管對(duì)象與接口間的數(shù)據(jù)詞典。本文的研究重點(diǎn)是開(kāi)發(fā)基于 Web 的設(shè)備管理應(yīng)用程序,因此,也會(huì)對(duì) Rapid Control For Web 組件做 一詳細(xì)的介紹。 命 令 行 方 式 企 業(yè) 應(yīng) 用S N M P A g e n tR a p i d C o n t r o lf o r A p p l e t sR a p i d C o n t r o l f o r W e bR a p i d C o n t r o lf o r C L IR a p i d C o n t r o lf o r E n t e r p r i s eE m b e d d e d L i b r a r yP r o d u c t A p p l i c a t i o nA S I CL i b r a r yW e b 瀏 覽 器J a v a 應(yīng) 用接 入方 式控 制 層應(yīng) 用 層系 統(tǒng) 層文 件 系 統(tǒng)M I B w a yR a p i d C o n t r o l B a c k p l a n e實(shí) 時(shí) 操 作 系 統(tǒng) 圖 Rapid Control 軟件框架圖 為了能夠調(diào)用已有 SNMP 管理例程, Rapid Control 還提供了 MIBway 機(jī)制。關(guān)于 RCB 的介紹將會(huì)在下面做詳細(xì)說(shuō)明。由于 Rapid Control SDK 本身已有一整套的網(wǎng)管系統(tǒng)實(shí)現(xiàn)方案,并提供很多關(guān)鍵技術(shù)的實(shí)現(xiàn),這使得設(shè)備開(kāi)發(fā)人員可以集中精力于管理系統(tǒng)中與具體設(shè)備相關(guān)的功能實(shí)現(xiàn),從而大大加快了開(kāi)發(fā)進(jìn)度。 開(kāi)發(fā)工具 Rapid Control 簡(jiǎn)介 Rapid Control SDK 的介紹 [8] Rapid Control SDK 是 Rapid Logic 公司開(kāi)發(fā)的用于開(kāi)發(fā)設(shè)備管理應(yīng)用程序的軟件開(kāi)發(fā)包,是針對(duì)基于實(shí)時(shí)操作系統(tǒng)的網(wǎng)絡(luò)設(shè)備上的管理系統(tǒng)的開(kāi)發(fā)。為了使鏡像 MAC表與交換芯片中真正的 MAC 表保持一致,這里用到了消息機(jī)制:即當(dāng) MAC 表自動(dòng)更新時(shí),交換控制器會(huì)向 CPU 發(fā)一個(gè)新地址消息,控制器的驅(qū)動(dòng)程序會(huì)處理這個(gè)消息,根據(jù)它更新鏡像地址表。還是由于前面提過(guò)的原因,我們并不是直接對(duì)芯片中的 MAC 表進(jìn)行管理,而是在內(nèi)存中建立一份 MAC 地址表的鏡像, MAC 表鏡像 在每次系統(tǒng)初始化過(guò)程中建立。或者 CPU 利用標(biāo)準(zhǔn) New Address 消息更新,或者利用詢問(wèn)寄存器來(lái)詢問(wèn)表項(xiàng)的內(nèi)容。 MAC 地址表的內(nèi)容通過(guò)交換控制器的地址自學(xué)習(xí)邏輯自動(dòng)完成,這個(gè)過(guò)程一般不需要軟件干預(yù)。在學(xué)習(xí)過(guò)程中,靜態(tài)地址所屬的條目不會(huì)自動(dòng)更新,交 換設(shè)備也不會(huì)向 CPU 發(fā)送 New Address 消息。 靜態(tài)地址,是 MAC 地址表中不隨時(shí)間老化的地址,它一直存在于 MAC 地址表中,不會(huì)因?yàn)槔匣?(aging)機(jī)制而被刪除。地址老 化時(shí)間不能太長(zhǎng),否則 MAC 地址表會(huì)溢出;也不能太短,否則設(shè)備會(huì)頻繁進(jìn)行刪除和建立地址表項(xiàng)的工作,影響設(shè)備性能。 在自學(xué)習(xí)的過(guò)程中, MAC 地址表的內(nèi)容不斷的更新, GT48350 每隔一段時(shí)間就會(huì)對(duì) MAC 地址表進(jìn)行掃描,如果某個(gè)動(dòng)態(tài) MAC 地址項(xiàng)在這段時(shí)間間隔內(nèi)