亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        網(wǎng)絡(luò)設(shè)備中命令行管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

        2008-12-31 00:00:00張志剛
        網(wǎng)絡(luò)與信息 2008年11期

        摘要:命令行接口是高端網(wǎng)絡(luò)設(shè)備中一個(gè)十分重要的功能模塊,通過(guò)它,后臺(tái)可發(fā)送命令來(lái)對(duì)前臺(tái)的資源進(jìn)行查詢、配置其工作模式、進(jìn)行系統(tǒng)控制等。本文旨在提供一種設(shè)計(jì)高效、穩(wěn)定的命令行系統(tǒng)的方法,描述了命令行接口的工作原理、總體設(shè)計(jì)、關(guān)鍵模塊的流程圖及重要數(shù)據(jù)結(jié)構(gòu),并介紹了命令行的語(yǔ)法設(shè)計(jì)、解析原理并配有實(shí)例說(shuō)明。

        關(guān)鍵詞:命令行;命令樹;命令節(jié)點(diǎn);參數(shù)關(guān)鍵詞

        中圖法分類號(hào):TP393.07文獻(xiàn)標(biāo)識(shí)碼: A

        1 引言

        命令行接口(Command Line Interface)簡(jiǎn)稱:CLI,是用戶與操作系統(tǒng)或應(yīng)用程序之間的一種基于文本的命令接口。它通過(guò)輸入命令來(lái)實(shí)現(xiàn)對(duì)系統(tǒng)的管理和維護(hù),并接收系統(tǒng)的響應(yīng)。CLI是商業(yè)化電信網(wǎng)絡(luò)設(shè)備中必備的管理控制方法,與SNMP、基于Web等管理方式所不同的是,CLI通過(guò)一個(gè)普通的串口應(yīng)用程序或Telnet外殼(shell)程序使用鍵盤輸入命令來(lái)實(shí)現(xiàn)對(duì)設(shè)備的監(jiān)控[1]。

        雖然對(duì)網(wǎng)絡(luò)設(shè)備的配置和管理也可以通過(guò)其他多種方式實(shí)現(xiàn),可以使用純字符形式的命令行和菜單,也可以使用圖形界面的web瀏覽器或?qū)iT的網(wǎng)管軟件。但無(wú)論何種網(wǎng)絡(luò)設(shè)備,其基于Telnet(SSH)協(xié)議的CLI命令行方式提供了比其支持的任何網(wǎng)管功能更為完備的管理能力。尤其是,當(dāng)網(wǎng)絡(luò)出現(xiàn)問(wèn)題,通過(guò)其他管理方式都無(wú)法訪問(wèn)到被管理設(shè)備時(shí),我們依然可以通過(guò)完全帶外的CONSOLE口使用CLI命令對(duì)被管理設(shè)備進(jìn)行信息采集和排障,而這點(diǎn)是所有其他管理方式所不具備的。相比較而言,CLI命令行方式的功能更強(qiáng)大,但掌握起來(lái)難度也更大些。

        2 CLI綜述

        2.1 CLI工作原理

        CLI是現(xiàn)代通信設(shè)備中一個(gè)十分重要的功能模塊,它與OMS(操作維護(hù)系統(tǒng))配合工作,通過(guò)后臺(tái)向前臺(tái)發(fā)送人機(jī)命令來(lái)對(duì)前臺(tái)的資源進(jìn)行操作,如資源使用查詢,單板的倒換、復(fù)位和狀態(tài)查看,環(huán)境設(shè)置等。命令行是駐留在通信設(shè)備中的程序,后臺(tái)主機(jī)通過(guò)一定的通信方式與命令行進(jìn)行交互,并根據(jù)命令行定義的規(guī)則,響應(yīng)后臺(tái)的命令,并返回執(zhí)行結(jié)果[2]。如圖1所示:

        串口方式用于本地管理,管理員必須使用超級(jí)終端在被管設(shè)備所在地對(duì)它進(jìn)行管理。

        Telnet方式用于Internet的遠(yuǎn)程登錄,它可以使管理員坐在入網(wǎng)的計(jì)算機(jī)前,通過(guò)網(wǎng)絡(luò)進(jìn)入遠(yuǎn)距離的被管設(shè)備,成為此被管設(shè)備的終端。當(dāng)用Telnet登錄到設(shè)備時(shí),實(shí)際上啟動(dòng)了兩個(gè)程序,一個(gè)叫“客戶”程序,它在管理員的本地機(jī)上運(yùn)行,另一個(gè)叫“服務(wù)器”程序,它在要登錄的遠(yuǎn)程設(shè)備上運(yùn)行。

        當(dāng)管理員運(yùn)行超級(jí)終端或Telnet并按下一個(gè)鍵時(shí),超級(jí)終端將向串口發(fā)送一個(gè)表示該鍵的字符串,Telnet則通過(guò)TCP/IP連接發(fā)送一個(gè)表示該鍵的字符串。只要能得到該字符串,就可以得知用戶按下了什么鍵。把該字符串解碼成鍵盤上的鍵位,然后傳遞給控制臺(tái)的上層軟件。上層軟件可以完全屏蔽串口和Telnet的操作,只要對(duì)該鍵進(jìn)行分析和處理,完全不用管是從串口還是從Telnet上來(lái)的[3]。

        2.2 命令行的基本操作流程

        (1) 用戶通過(guò)Console或Telnet輸入信息,可以是配置、管理等常規(guī)命令,也可以是故障查詢等非常規(guī)命令。

        (2) 管理程序通過(guò)命令Shell將用戶輸入信息組合成一個(gè)單獨(dú)的命令,并發(fā)送給解析引擎(parser)。此外,Shell還應(yīng)具有編輯和記錄命令等基本功能。

        (3) 解析引擎(parser)對(duì)命令按特定語(yǔ)法規(guī)則進(jìn)行分析和檢查。如果命令格式正確,就定位(locate)命令集中相應(yīng)的回調(diào)函數(shù)(callback function)。該函數(shù)應(yīng)將命令參數(shù)等信息封裝為消息(message),并通過(guò)消息隊(duì)列(queue)發(fā)送給相關(guān)的任務(wù)(task)以執(zhí)行該命令(參見圖1)。反之,如果命令格式錯(cuò)誤,則向Console或Telnet輸出解析錯(cuò)誤信息。

        (4) 通過(guò)Shell將回調(diào)函數(shù)的執(zhí)行結(jié)果發(fā)回到用戶指定的Console或Telnet。

        3 命令二叉樹的設(shè)計(jì)

        命令集合可以用一個(gè)樹形結(jié)構(gòu)直觀表示,稱之為命令樹。實(shí)際上,在同一個(gè)模式下,該樹形結(jié)構(gòu)是棵二叉樹結(jié)構(gòu)。樹上的每一個(gè)節(jié)點(diǎn),稱之為命令節(jié)點(diǎn)。而每個(gè)命令節(jié)點(diǎn)與一個(gè)命令關(guān)鍵字對(duì)應(yīng)。一個(gè)完整的命令可以由沿著樹干從根節(jié)點(diǎn)一直到葉子節(jié)點(diǎn)的命令關(guān)鍵字構(gòu)成,葉節(jié)點(diǎn)里存有指向該命令處理函數(shù)的指針。因?yàn)槊钚杏擅铌P(guān)鍵字和參數(shù)組成,所以在設(shè)計(jì)命令節(jié)點(diǎn)的時(shí)候應(yīng)同時(shí)考慮命令關(guān)鍵字和參數(shù)的構(gòu)成情況。

        下面給出了節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu):

        typedef struct cmdNode

        {

        char *pKeyword;/*命令關(guān)鍵字*/

        char *pKwab; /*命令名縮寫*/

        char *pHelp; /*該命令幫助*/

        byte flag; /*判斷該節(jié)點(diǎn)是否帶參數(shù)*/

        Access accesslv; /*命令級(jí)別*/

        struct cmdNode*parent; /*指向該節(jié)點(diǎn)的雙親節(jié)點(diǎn)*/

        struct cmdNode*lChildren;/*該命令節(jié)點(diǎn)的下級(jí)子命令節(jié)點(diǎn)*/

        struct cmdNode*rChildren;/*與該命令節(jié)點(diǎn)同級(jí)的命令節(jié)點(diǎn)描述*/

        paramInfo*pParams;/*描述該命令參數(shù)的數(shù)據(jù)結(jié)構(gòu)*/

        }cmdNode;

        參數(shù)是命令執(zhí)行的附加信息,具有四個(gè)屬性:

        (1) 參數(shù)的類型,分為可選和必選型。對(duì)于必選型,要求必須給出參數(shù),如:配置端口地址的命令ip address后面必須跟ip地址,否則程序會(huì)報(bào)錯(cuò)。而查看vlan設(shè)置的命令show vlan后面可以跟vlan號(hào),也可以不加。

        (2) 參數(shù)的數(shù)據(jù)類型,包括整型、字符串型、枚舉型等。

        (3) 參數(shù)的默認(rèn)值,通過(guò)一個(gè)flag判斷該參數(shù)是否有默認(rèn)值,若有,在沒(méi)輸入?yún)?shù)時(shí),命令解析引擎將自動(dòng)給它設(shè)置成該默認(rèn)值。

        (4) 參數(shù)的取值范圍,設(shè)置參數(shù)的取值范圍,可將參數(shù)越界這樣的低級(jí)錯(cuò)誤消除在解析階段。

        這樣參數(shù)的數(shù)據(jù)結(jié)構(gòu)為:

        typedef struct paramStruct

        {byte Ptype;/*參數(shù)的類型,分為可選和必選型*/

        intpnum; /*參數(shù)個(gè)數(shù)*/

        SbyteDtype;/*參數(shù)的數(shù)據(jù)類型,包括整型、字符串型、枚舉型等*/

        Sbyte1 Default;/*參數(shù)的默認(rèn)值*/

        Sbyte2 Prange; /*參數(shù)的取值范圍*/

        }paramInfo;

        命令樹有一個(gè)根節(jié)點(diǎn),是所有命令的入口。根節(jié)點(diǎn)下面就是所有命令的集合,根節(jié)點(diǎn)以下是模式節(jié)點(diǎn),在相應(yīng)模式節(jié)點(diǎn)以下是一棵二叉樹,該二叉樹每一個(gè)節(jié)點(diǎn)代表命令中的一個(gè)關(guān)鍵字。相同等級(jí)的相同關(guān)鍵字合并成為一個(gè)節(jié)點(diǎn),以節(jié)省存儲(chǔ)空間。每一個(gè)葉子節(jié)點(diǎn)意味著一個(gè)完整命令的結(jié)尾,所以都存儲(chǔ)著一個(gè)命令回調(diào)函數(shù)[4]。

        如圖2所示最上面的節(jié)點(diǎn)是根節(jié)點(diǎn),其下有多個(gè)模式節(jié)點(diǎn),模式1下面就是命令二叉樹。兩個(gè)命令show cpu、 show interface brief中,關(guān)鍵字“show”的左子節(jié)點(diǎn)的關(guān)鍵字是“cpu”,表示“cpu”可以根在“show”的后面,由于某個(gè)節(jié)點(diǎn)的所有右子節(jié)點(diǎn)均與其同級(jí),所以,“cpu”的右子節(jié)點(diǎn)“interface”都是同級(jí)別的,即均可以跟在“show”關(guān)鍵字的后面組成命令。而在端口配置模式下,命令節(jié)點(diǎn)“address”中的flag=1,可知該節(jié)點(diǎn)后要接參數(shù),并調(diào)用參數(shù)的數(shù)據(jù)結(jié)構(gòu)。實(shí)際上,命令“ip address”后要加ip地址及掩碼,用以配置端口地址。三個(gè)葉節(jié)點(diǎn)中保存著三條命令對(duì)應(yīng)的回調(diào)函數(shù)指針。

        4 命令行的解析

        命令解析引擎使用一種向量數(shù)組的數(shù)據(jù)結(jié)構(gòu)用以存儲(chǔ)待匹配的字符串。其數(shù)據(jù)結(jié)構(gòu)如下:

        typedef struct vector

        {slong locMax;/*已經(jīng)分配的最大單元號(hào)*/

        slong usedMax; /*已經(jīng)用到的最大單元號(hào),必須在0到locmax之間*/

        void**vec; /*地址數(shù)組,數(shù)組長(zhǎng)度為locMax+1*/

        } VECTOR_U;

        typedefVECTOR_U*PVECT;

        4.1 命令行語(yǔ)法分析

        用戶在命令行界面下輸入的命令行字符串,以空格為分隔符分為一個(gè)個(gè)小塊,我們把每一小塊稱為一個(gè)命令元素即token。為了對(duì)命令元素進(jìn)行區(qū)分,我們使用$加數(shù)字來(lái)標(biāo)識(shí)每個(gè)命令元素。由于命令是由命令關(guān)鍵字和參數(shù)組成,所以相應(yīng)的命令元素也分為命令關(guān)鍵字和參數(shù)。

        如:命令ping -t -n 100 192.168.0.6,其中ping是命令關(guān)鍵字,必須嚴(yán)格輸入p、i、n、g四個(gè)字母,-t和-n也作為命令關(guān)鍵字,但是可選項(xiàng),-t表示ping指定的計(jì)算機(jī)直到中斷,100作為-n的參數(shù)指發(fā)送100個(gè)ECHO數(shù)據(jù)包,默認(rèn)值為4。192.168.0.6為必選參數(shù)目的端的ip地址。使用標(biāo)識(shí)符表示:$1 [$2|$3] $4。

        我們可以用不同的方法來(lái)區(qū)分命令關(guān)鍵字,參數(shù)關(guān)鍵字,哪些是可選項(xiàng),哪些是必選項(xiàng),以及相互之間的關(guān)系,使用戶明白一個(gè)命令各個(gè)組成部分及其屬性,這就是命令行的語(yǔ)法。通常我們使用如下規(guī)定:

        (1) 黑體字表示關(guān)鍵字,可以是命令關(guān)鍵字、參數(shù)關(guān)鍵字或有特定含義的參數(shù)值。

        (2) 斜體字表示參數(shù)變量。

        (3) “[]”表示括號(hào)中的元素是可選的。

        (4) “{}”表示括號(hào)中的元素是必選的。

        (5) “[]”和“{}”可以嵌套使用。

        (6) “|”表示并列關(guān)系,與“{}”或“[]”配合使用。

        例如:華為交換機(jī)中添加/修改地址表項(xiàng)的命令:

        mac-address {static|dynamic} mac_address interface{interface_name|interface_type interface_num} vlan vlan_id

        undo mac-address {static|dynamic}[[mac_address]interface[interface_name| interface_type interface_num] vlan vlan_id]

        在上一個(gè)命令中黑體字mac-address、static、dynamic、interface、vlan為關(guān)鍵字,static和dynamic為必選項(xiàng)且為并列關(guān)系,斜體字部分為參數(shù)變量。且看下面具體實(shí)現(xiàn):

        [Switch] mac-address static 0010-6c78-

        2314 interface Ethernet 0/2 vlan 1

        #設(shè)置vlan 1 中靜態(tài)MAC地址0010-6c78-2314所在的以太口為E0/1。

        [Switch] undo mac-address static 0010-6c78-2314 interface Ethernet 0/2 vlan 1

        #刪除靜態(tài)MAC地址。

        用戶在輸入命令的過(guò)程中可以使用“?”來(lái)尋求幫助。系統(tǒng)的幫助信息可分為兩種:一是在命令的輸入過(guò)程中,在空格后輸入“?”,此時(shí)系統(tǒng)會(huì)調(diào)出前一個(gè)命令元素的幫助信息。如:用戶輸入“ping?”,此時(shí)用戶想知道ping后接什么元素。系統(tǒng)會(huì)輸出:

        KEYWORD<-t> ping until CTRL+C [optional]

        IPADDRESS ip address

        而在輸入命令元素的過(guò)程中用戶使用“?”時(shí),如“p?”,系統(tǒng)會(huì)列出所有以p開頭的命令元素。

        用戶輸入完成后(通常以enter結(jié)束),系統(tǒng)會(huì)將用戶輸入與相應(yīng)的命令語(yǔ)法匹配,若匹配不成功,則會(huì)報(bào)錯(cuò),返回提示符界面等待用戶重新輸入,如匹配無(wú)誤則進(jìn)入下面的解析模塊。

        4.2 命令解析步驟

        (1) 接收用戶輸入,并判斷鍵值,如果用戶輸入的是DELETE鍵則刪除緩沖區(qū)中當(dāng)前光標(biāo)的字符,如用戶輸入U(xiǎn)P/DOWN鍵,則查閱歷史命令。

        (2) 將用戶輸入的字符串分片,以空格為分割符,分成一個(gè)個(gè)token,并將地址保存至向量數(shù)組*PVECT中,遇到回車則表示用戶完成輸入。

        (3) 根節(jié)點(diǎn)開始,找到相應(yīng)的命令模式,逐個(gè)節(jié)點(diǎn)進(jìn)行匹配。因?yàn)槊總€(gè)節(jié)點(diǎn)的右節(jié)點(diǎn)均是與其同級(jí)的節(jié)點(diǎn),所以,查找一個(gè)當(dāng)前節(jié)點(diǎn)的所有右節(jié)點(diǎn),如不匹配則再查找其右節(jié)點(diǎn),一直深入到?jīng)]有右節(jié)點(diǎn)為止。若沒(méi)有匹配成功,則直接報(bào)錯(cuò),并返回。若有一個(gè)節(jié)點(diǎn)匹配成功,則往該節(jié)點(diǎn)左樹深入一級(jí),也就是進(jìn)入下一個(gè)keyword或者argument的匹配,一直到所有的“詞”解析完畢。

        (4) 調(diào)用相應(yīng)葉節(jié)點(diǎn)中的處理函數(shù)指針,使其工作完成命令。

        在此解析過(guò)程中,如果用戶某個(gè)命令關(guān)鍵字沒(méi)有輸全并以Tab鍵結(jié)束,可以自動(dòng)實(shí)現(xiàn)命令補(bǔ)全,并將補(bǔ)全后的命令送到用戶輸入命令行,供用戶輸入下一個(gè)關(guān)鍵字。該命令解析模塊同樣可以為Web服務(wù)器接口工作,搜索用戶通過(guò)Web瀏覽器輸入的命令。

        5 結(jié)束語(yǔ)

        一個(gè)功能強(qiáng)大的命令行接口是任何高端路由器所必須具有的模塊,通過(guò)它,后臺(tái)可方便地對(duì)前臺(tái)進(jìn)行操作。本文介紹的命令行的設(shè)計(jì)及解析方法,為網(wǎng)絡(luò)與電信行業(yè)的嵌入式系統(tǒng)提供了一種方便的、可維護(hù)性強(qiáng)、可擴(kuò)展性好的命令配置管理方式。本系統(tǒng)提出的關(guān)鍵字縮寫、靈活的訪問(wèn)級(jí)別控制等功能可以進(jìn)一步改進(jìn)現(xiàn)有設(shè)備中CLI的性能。實(shí)踐證明,該系統(tǒng)具有穩(wěn)定、高效、智能、可移植性強(qiáng)、可維護(hù)性好等諸多優(yōu)點(diǎn)。

        ——————————

        參考文獻(xiàn)

        [1]崔滔,陳自力.命令行接口管理系統(tǒng)的研究與實(shí)現(xiàn).計(jì)算機(jī)應(yīng)用,2002,22(10):82-84.

        [2]解震春,邱智亮.命令行接口管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).網(wǎng)絡(luò)技術(shù)與應(yīng)用,2002,32(11):44-56.

        [3]徐立鋒,蘆東昕,繆敬.一種高端數(shù)據(jù)產(chǎn)品命令行接口的設(shè)計(jì)//中興通訊公司成都研究所.計(jì)算機(jī)工程,2003,29(22):64-67.

        [4]祝鵬,楊宗凱.嵌入式命令行管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).計(jì)算機(jī)應(yīng)用,2003,23(12):244-245.

        作者簡(jiǎn)介:

        趙輝(1976-),男,山東省棗莊市,碩士研究生,主要研究領(lǐng)域?yàn)榫W(wǎng)絡(luò)管理與安全。

        張志剛(1963-),男,北京市,副教授,主要研究領(lǐng)域?yàn)閼?yīng)用數(shù)學(xué)、概率統(tǒng)計(jì)、計(jì)算機(jī)應(yīng)用、智能算法等。

        91中文人妻熟女乱又乱| 91精品国产91久久综合桃花| 亚洲人妻有码中文字幕| 国产精品日韩av一区二区三区| 成人午夜福利视频| 女人夜夜春高潮爽a∨片传媒| 国产美女裸身网站免费观看视频| 五月天欧美精品在线观看| 国产精品亚洲婷婷99久久精品| 日韩美女av一区二区| 97久久精品人妻人人搡人人玩| 高潮毛片无遮挡高清免费| 亚洲第一区二区快射影院| 精品女厕偷拍视频一区二区区| 国产精品无码无卡无需播放器| 中文字幕熟妇人妻在线视频| 精品人妻少妇一区二区不卡| 精品人妻免费看一区二区三区 | 亚洲福利视频一区二区三区| 99久久婷婷国产一区| 成人无码网www在线观看| 五十路熟妇亲子交尾| 久久精品国产亚洲av热九九热| 亚洲av乱码二区三区涩涩屋 | 欧美一级视频在线| 丝袜美腿丝袜美腿丝袜美腿丝袜| 女人被狂躁c到高潮视频| 国产成人精品电影在线观看18 | 国产护士一区二区三区| 一本精品99久久精品77| 国产成人精品日本亚洲18| 亚洲精品日本久久久中文字幕| 中文字幕女优av在线| 国产av永久无码天堂影院| 91av视频在线| 国产精品美女自在线观看| 国精产品一区一区二区三区mba| 六月婷婷久香在线视频| 精品手机在线视频| 99re国产电影精品| av在线播放中文专区|