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

主站蜘蛛池模板: 丁香婷婷综合激情| 中文无码日韩精品| 国产成人资源| 国内精品小视频福利网址| 国产精品尹人在线观看| 青青草原国产免费av观看| 日本www色视频| 欧美成在线视频| 色综合天天综合中文网| 国产在线精品美女观看| 国产精品欧美在线观看| 国产精品综合色区在线观看| 中文精品久久久久国产网址| 国产无遮挡裸体免费视频| 国产办公室秘书无码精品| 4虎影视国产在线观看精品| 福利国产微拍广场一区视频在线| 亚洲男人的天堂在线| 高清免费毛片| 91偷拍一区| 久草视频一区| 亚洲欧美日韩中文字幕在线| 亚洲无线视频| 国产午夜一级毛片| 日韩AV无码免费一二三区| 亚洲日本中文字幕天堂网| 四虎国产成人免费观看| 日韩午夜片| 2022国产无码在线| 久久久91人妻无码精品蜜桃HD| 精品偷拍一区二区| 亚国产欧美在线人成| 色婷婷在线播放| 亚洲日韩久久综合中文字幕| 91精品情国产情侣高潮对白蜜| 国产波多野结衣中文在线播放| 亚洲国产系列| 亚洲男人的天堂久久香蕉网 | 日韩高清欧美| 欧洲av毛片| 国产又黄又硬又粗| 67194亚洲无码| 亚洲激情区| 国产成人精品午夜视频'| 亚洲欧美激情另类| 色偷偷综合网| 一级毛片中文字幕| 青青青视频91在线 | 久久国产精品国产自线拍| 77777亚洲午夜久久多人| 国产精品自在在线午夜| 久久精品丝袜| 中文毛片无遮挡播放免费| 日韩无码视频专区| 久久这里只有精品2| 日韩一级二级三级| 午夜福利在线观看入口| 国产成人综合在线观看| 欧美成在线视频| 人妻一区二区三区无码精品一区| 久久这里只有精品免费| 亚洲人成网站色7777| av一区二区三区高清久久| 久久久久久尹人网香蕉| 激情乱人伦| 日本欧美成人免费| 国产97色在线| 亚洲—日韩aV在线| 亚洲美女操| 伊人国产无码高清视频| 欧美在线综合视频| 欧美日韩在线成人| 国产精品三级av及在线观看| 日韩久草视频| 97视频免费在线观看| 国产精品久久久久婷婷五月| 91在线激情在线观看| 欧美色亚洲| 国产色婷婷视频在线观看| 国产成人一区二区| 亚洲欧美国产视频| 免费视频在线2021入口|