999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人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è)備中一個十分重要的功能模塊,通過它,后臺可發(fā)送命令來對前臺的資源進(jìn)行查詢、配置其工作模式、進(jìn)行系統(tǒng)控制等。本文旨在提供一種設(shè)計(jì)高效、穩(wěn)定的命令行系統(tǒng)的方法,描述了命令行接口的工作原理、總體設(shè)計(jì)、關(guān)鍵模塊的流程圖及重要數(shù)據(jù)結(jié)構(gòu),并介紹了命令行的語法設(shè)計(jì)、解析原理并配有實(shí)例說明。

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

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

1 引言

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

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

2 CLI綜述

2.1 CLI工作原理

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

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

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

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

2.2 命令行的基本操作流程

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

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

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

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

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

命令集合可以用一個樹形結(jié)構(gòu)直觀表示,稱之為命令樹。實(shí)際上,在同一個模式下,該樹形結(jié)構(gòu)是棵二叉樹結(jié)構(gòu)。樹上的每一個節(jié)點(diǎn),稱之為命令節(jié)點(diǎn)。而每個命令節(jié)點(diǎn)與一個命令關(guān)鍵字對應(yīng)。一個完整的命令可以由沿著樹干從根節(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; /*命令級別*/

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

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

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

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

}cmdNode;

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

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

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

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

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

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

typedef struct paramStruct

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

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

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

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

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

}paramInfo;

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

如圖2所示最上面的節(jié)點(diǎn)是根節(jié)點(diǎn),其下有多個模式節(jié)點(diǎn),模式1下面就是命令二叉樹。兩個命令show cpu、 show interface brief中,關(guān)鍵字“show”的左子節(jié)點(diǎn)的關(guān)鍵字是“cpu”,表示“cpu”可以根在“show”的后面,由于某個節(jié)點(diǎn)的所有右子節(jié)點(diǎn)均與其同級,所以,“cpu”的右子節(jié)點(diǎn)“interface”都是同級別的,即均可以跟在“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地址及掩碼,用以配置端口地址。三個葉節(jié)點(diǎn)中保存著三條命令對應(yīng)的回調(diào)函數(shù)指針。

4 命令行的解析

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

typedef struct vector

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

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

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

} VECTOR_U;

typedefVECTOR_U*PVECT;

4.1 命令行語法分析

用戶在命令行界面下輸入的命令行字符串,以空格為分隔符分為一個個小塊,我們把每一小塊稱為一個命令元素即token。為了對命令元素進(jìn)行區(qū)分,我們使用$加數(shù)字來標(biāo)識每個命令元素。由于命令是由命令關(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四個字母,-t和-n也作為命令關(guān)鍵字,但是可選項(xiàng),-t表示ping指定的計(jì)算機(jī)直到中斷,100作為-n的參數(shù)指發(fā)送100個ECHO數(shù)據(jù)包,默認(rèn)值為4。192.168.0.6為必選參數(shù)目的端的ip地址。使用標(biāo)識符表示:$1 [$2|$3] $4。

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

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

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

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

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

(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]

在上一個命令中黑體字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地址。

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

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

IPADDRESS ip address

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

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

4.2 命令解析步驟

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

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

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

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

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

5 結(jié)束語

一個功能強(qiáng)大的命令行接口是任何高端路由器所必須具有的模塊,通過它,后臺可方便地對前臺進(jìn)行操作。本文介紹的命令行的設(shè)計(jì)及解析方法,為網(wǎng)絡(luò)與電信行業(yè)的嵌入式系統(tǒng)提供了一種方便的、可維護(hù)性強(qiáng)、可擴(kuò)展性好的命令配置管理方式。本系統(tǒng)提出的關(guān)鍵字縮寫、靈活的訪問級別控制等功能可以進(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.

作者簡介:

趙輝(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)用、智能算法等。

主站蜘蛛池模板: 国产精品思思热在线| 亚洲成人网在线播放| 日本不卡视频在线| 在线a网站| 国产第一色| 一级在线毛片| 综合人妻久久一区二区精品| 亚洲人视频在线观看| 久久精品无码国产一区二区三区 | 三级毛片在线播放| 国产69精品久久| 人妻无码中文字幕第一区| 伊人激情久久综合中文字幕| 97se亚洲综合在线| 国产成人高清精品免费| 99性视频| 国产成人亚洲无码淙合青草| 中文字幕66页| 茄子视频毛片免费观看| 国产第四页| 亚洲中文字幕久久无码精品A| 亚洲成人福利网站| 91毛片网| h网址在线观看| 国产精品久线在线观看| 东京热av无码电影一区二区| 亚洲色图欧美视频| 亚洲精品另类| 精品国产电影久久九九| 无码aⅴ精品一区二区三区| 无码丝袜人妻| 91小视频在线观看| 亚洲大学生视频在线播放| 久久成人18免费| 亚洲高清在线播放| 亚洲国产精品日韩专区AV| 无码一区中文字幕| 国产精品欧美日本韩免费一区二区三区不卡 | 国产精品久久精品| www.狠狠| 欧美日韩免费在线视频| 欧美在线伊人| 日韩欧美中文字幕在线精品| 国产乱人伦AV在线A| 成人午夜视频免费看欧美| 一级毛片免费播放视频| 日本a级免费| 亚洲成人网在线播放| 国产精品太粉嫩高中在线观看 | 爆乳熟妇一区二区三区| 日本91视频| 国产乱子伦精品视频| 99在线视频免费观看| 日韩中文无码av超清 | 国产永久无码观看在线| 欧美国产三级| 小13箩利洗澡无码视频免费网站| 亚洲天堂视频网站| 91久久偷偷做嫩草影院精品| 久久美女精品| 日本在线国产| 91精品国产一区自在线拍| 亚洲高清日韩heyzo| 成年人福利视频| 国产在线啪| 老汉色老汉首页a亚洲| 无码福利日韩神码福利片| 久久黄色小视频| 永久免费无码日韩视频| 欧美高清国产| 国产精品主播| 无码区日韩专区免费系列 | 亚洲成A人V欧美综合天堂| 99re这里只有国产中文精品国产精品 | 欧美狠狠干| 欧美区一区二区三| 91极品美女高潮叫床在线观看| 亚洲第一精品福利| 亚洲国产成人无码AV在线影院L| 亚洲中文字幕手机在线第一页| 男人的天堂久久精品激情| 色综合婷婷|