本發(fā)明涉及網(wǎng)絡(luò)通信領(lǐng)域,特別是涉及一種利用tcl腳本實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的方法及裝置。
背景技術(shù):
::在通信
技術(shù)領(lǐng)域:
:,gpon(gigabit-capablepassiveopticalnetworkg比特?zé)o源光網(wǎng)絡(luò))不僅具有高帶寬,高效率,覆蓋范圍廣,用戶接口豐富等眾多優(yōu)點(diǎn),更以其強(qiáng)大的oam(operationadministrationandmaintenance,操作維護(hù)管理)功能,彌補(bǔ)了眾多接入技術(shù)遠(yuǎn)程控制能力的不足,逐漸成為接入技術(shù)的主流。omci(onumanagementandcontrolinterface,光網(wǎng)絡(luò)單元管理控制接口)是gpon標(biāo)準(zhǔn)中定義的一種配置傳輸通道,其通過在olt(opticallinetermination,光線路終端)和ont(opticalnetworkterminal,光網(wǎng)絡(luò)終端)之間建立專有的omci消息,用于提供標(biāo)準(zhǔn)的獲取ont能力,并對其進(jìn)行管理和控制的方法。在通信系統(tǒng)中,協(xié)議棧開發(fā)一直是軟件工程師工作量很大的任務(wù)。由于協(xié)議棧的特殊性,不可避免的會(huì)有很多重復(fù)性的代碼需要書寫,這往往成倍的增加工程師的工作量,拉長項(xiàng)目開發(fā)周期,以至于增加項(xiàng)目的開發(fā)難度。現(xiàn)有的各廠商omci協(xié)議棧,大部分都是由開發(fā)人員手動(dòng)輸入代碼來完成,即使像美國博通這樣的大廠商也僅僅是對少部分的代碼做了自動(dòng)生成技術(shù),如對me對象的結(jié)構(gòu)定義。所以現(xiàn)有技術(shù)需要花費(fèi)大量的時(shí)間及人力,且omci標(biāo)準(zhǔn)在不停的改動(dòng),現(xiàn)有技術(shù)開發(fā)的協(xié)議棧不利于后續(xù)的維護(hù)。技術(shù)實(shí)現(xiàn)要素:為克服上述現(xiàn)有技術(shù)存在的不足,本發(fā)明之目的在于提供一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的方法及裝置,以實(shí)現(xiàn)omci協(xié)議棧代碼的自動(dòng)生成,大大減少了人為寫代碼的工作量,且便于后續(xù)的維護(hù)及調(diào)試。為達(dá)上述目的,本發(fā)明提出一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的方法,包括如下步驟:步驟一,根據(jù)itu通信標(biāo)準(zhǔn)列出的me對象,對me對象進(jìn)行定義申明,實(shí)現(xiàn)me定義腳本的設(shè)計(jì);步驟二,根據(jù)itu通信標(biāo)準(zhǔn)申明的me對象操作方法及屬性特性,從步驟一的me定義腳本中獲取me對象的表述來生成功能代碼,實(shí)現(xiàn)me功能實(shí)現(xiàn)腳本的設(shè)計(jì);步驟三,采用該me定義腳本和me功能實(shí)現(xiàn)腳本協(xié)同的方式,實(shí)現(xiàn)omci協(xié)議棧代碼的自動(dòng)生成。進(jìn)一步地,該me定義腳本包括該me的全局屬性的定義以及該me中所有參數(shù)的屬性定義。進(jìn)一步地,于步驟二中,該me功能實(shí)現(xiàn)腳本的規(guī)則生成的文件包括協(xié)議棧公用函數(shù)源碼文件、協(xié)議棧me數(shù)據(jù)庫結(jié)構(gòu)體定義頭文件以及協(xié)議棧me私有函數(shù)接口源文件中的部分或全部。進(jìn)一步地,該協(xié)議棧公用函數(shù)源碼文件生成規(guī)則如下:獲取所有me列表;遍歷所有me列表;根據(jù)me的列表索引返回該me的最大參數(shù)個(gè)數(shù)、所有mib的初始化函數(shù)、根據(jù)me的列表索引返回該me信息的全局變量內(nèi)存地址、根據(jù)me的列表索引返回該me的本地?cái)?shù)據(jù)庫可寫內(nèi)存地址、根據(jù)me的列表索引返回該me的本地?cái)?shù)據(jù)庫可讀內(nèi)存地址、根據(jù)me的列表索引擦除該me的本地?cái)?shù)據(jù)庫數(shù)據(jù)、根據(jù)me的列表索引返回該me的數(shù)據(jù)長度、根據(jù)me的列表索引返回該me的操作支持類型、用于mib上報(bào)過程的me數(shù)據(jù)片段初始化函數(shù)。進(jìn)一步地,該協(xié)議棧me數(shù)據(jù)庫結(jié)構(gòu)體定義頭文件的生成規(guī)則如下:獲取該me定義腳本中關(guān)于該me的名稱,用于申明該結(jié)構(gòu)體名稱;循環(huán)遍歷該me所有的參數(shù)屬性,依次判斷該參數(shù)屬性的數(shù)據(jù)類型。若為無符號(hào)字符型的參數(shù),則代碼生成以無符號(hào)字符型定義該屬性;若為無符號(hào)短整型的參數(shù),則代碼生成以無符號(hào)短整型定義該屬性;若為無符號(hào)整型的參數(shù),則代碼生成以無符號(hào)整型定義該屬性;若為字符串類型的參數(shù),則代碼生成以字符串類型定義該屬性。進(jìn)一步地,該協(xié)議棧me私有函數(shù)接口源文件包含的函數(shù)包括me設(shè)置回調(diào)函數(shù)、me取值回調(diào)函數(shù)、me創(chuàng)建回調(diào)函數(shù)、me刪除回調(diào)函數(shù)、omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù)、按me參數(shù)掩碼發(fā)消息函數(shù)中的部分或全部。進(jìn)一步地,該me取值回調(diào)函數(shù)生成規(guī)則如下:根據(jù)參數(shù)個(gè)數(shù),循環(huán)遍歷me表的所有參數(shù);每個(gè)參數(shù)都擁有自己的掩碼作為執(zhí)行條件;若成立再判斷該參數(shù)的數(shù)據(jù)類型,根據(jù)參數(shù)的數(shù)據(jù)類型的不同長度,將數(shù)據(jù)庫中參數(shù)值拷貝到一段內(nèi)存中,組成回復(fù)的omci報(bào)文。進(jìn)一步地,該omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù)生成規(guī)則如下:根據(jù)參數(shù)個(gè)數(shù),循環(huán)遍歷me表的所有參數(shù);每個(gè)參數(shù)都擁有自己的掩碼作為執(zhí)行條件,若成立再判斷該參數(shù)的數(shù)據(jù)類型,根據(jù)無符號(hào)字符型、無符號(hào)短整型、無符號(hào)整形、字符串類型分別做不同長度的內(nèi)存拷貝動(dòng)作,實(shí)現(xiàn)omci報(bào)文內(nèi)容到me參數(shù)值的轉(zhuǎn)換。進(jìn)一步地,該按me參數(shù)掩碼發(fā)消息函數(shù)的生成規(guī)則如下:根據(jù)參數(shù)個(gè)數(shù),循環(huán)遍歷所有參數(shù);每個(gè)參數(shù)都擁有自己的掩碼作為執(zhí)行條件,若成立再判斷是否支持手動(dòng)處理,若支持手動(dòng)處理則生成手動(dòng)處理函數(shù),若不支持則使用該參數(shù)的消息id和me通信進(jìn)程名稱進(jìn)行消息的發(fā)送。為達(dá)到上述目的,本發(fā)明還提供一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的系統(tǒng),包括:me定義腳本設(shè)計(jì)單元,用于根據(jù)itu通信標(biāo)準(zhǔn)列出的me對象,對me對象進(jìn)行定義申明,實(shí)現(xiàn)me定義腳本的設(shè)計(jì);me功能實(shí)現(xiàn)腳本設(shè)計(jì)單元,用于根據(jù)itu通信標(biāo)準(zhǔn)申明的me對象操作方法及屬性特性,從該me定義腳本設(shè)計(jì)單元的me定義腳本中獲取me對象的表述來生成功能代碼,實(shí)現(xiàn)me功能實(shí)現(xiàn)腳本的設(shè)計(jì);代碼自動(dòng)生成單元,用于采用該me定義腳本和me功能實(shí)現(xiàn)腳本協(xié)同的方式,實(shí)現(xiàn)omci協(xié)議棧代碼的自動(dòng)生成。與現(xiàn)有技術(shù)相比,本發(fā)明一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的方法及系統(tǒng)通過設(shè)計(jì)me定義腳本和me功能實(shí)現(xiàn)腳本,采用me定義腳本和me功能實(shí)現(xiàn)腳本協(xié)同的方式,實(shí)現(xiàn)了omci協(xié)議棧代碼的自動(dòng)生成,使得開發(fā)人員只需要維護(hù)me定義腳本和me功能實(shí)現(xiàn)腳本這兩個(gè)文件,大大減少了人為寫代碼的工作量,且便于后續(xù)的維護(hù)及調(diào)試。附圖說明圖1為本發(fā)明一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的方法的步驟流程圖;圖2為本發(fā)明具體實(shí)施例中協(xié)議棧公用函數(shù)源碼文件的生成示意圖;圖3為本發(fā)明具體實(shí)施例中協(xié)議棧me數(shù)據(jù)庫結(jié)構(gòu)體定義頭文件的生成示意圖;圖4為本發(fā)明具體實(shí)施例中協(xié)議棧me私有函數(shù)接口源文件的生成示意圖;圖5為本發(fā)明一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的系統(tǒng)的系統(tǒng)架構(gòu)圖。具體實(shí)施方式以下通過特定的具體實(shí)例并結(jié)合附圖說明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭示的內(nèi)容輕易地了解本發(fā)明的其它優(yōu)點(diǎn)與功效。本發(fā)明亦可通過其它不同的具體實(shí)例加以施行或應(yīng)用,本說明書中的各項(xiàng)細(xì)節(jié)亦可基于不同觀點(diǎn)與應(yīng)用,在不背離本發(fā)明的精神下進(jìn)行各種修飾與變更。圖1為本發(fā)明一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的方法的步驟流程圖。如圖1所示,本發(fā)明一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的方法,包括如下步驟:步驟101,根據(jù)itu通信標(biāo)準(zhǔn)列出的me(managedentity,管理單元)對象,對me對象進(jìn)行定義申明,實(shí)現(xiàn)me定義腳本的設(shè)計(jì)。在本發(fā)明具體實(shí)施里中,本步驟根據(jù)itu-988規(guī)范標(biāo)準(zhǔn)列出的me對象,設(shè)計(jì)一套描述該me對象的表述方法me定義腳本的腳本文件是對me對象的定義申明,me定義包括兩個(gè)部分,首先是關(guān)于該me的全局屬性的定義,其次是該me中所有參數(shù)的屬性定義。在本發(fā)明具體實(shí)施例中,不同me按順序排列,并且以tablebegin開始,以tableend結(jié)尾,同個(gè)me下的不同參數(shù),則以attributebegin開始,以attributeend結(jié)尾。(1)me的全局屬性如下:me的名稱:用于生成相關(guān)函數(shù)、結(jié)構(gòu)體、消息的名稱;me最大的實(shí)例數(shù):用于程序初始化內(nèi)存時(shí)候;me在itu-988標(biāo)準(zhǔn)中定義的id(identifier,身份標(biāo)示值):用于判斷me身份;me支持的操作類型:在程序接收報(bào)文入口處判斷是否支持相應(yīng)操作;me用于創(chuàng)建的消息id:創(chuàng)建該me時(shí)候若需要通知其他系統(tǒng),則使用該消息id,若不需要?jiǎng)t為空;me用于創(chuàng)建的消息結(jié)構(gòu)體:創(chuàng)建該me時(shí)候若需要通知其他系統(tǒng),則使用該結(jié)構(gòu)體傳輸數(shù)據(jù),若不需要?jiǎng)t為空;me用于刪除的消息id:刪除該me時(shí)候若需要通知其他系統(tǒng),則使用該消息id,若不需要?jiǎng)t為空;me用于刪除的消息結(jié)構(gòu)體:刪除該me時(shí)候若需要通知其他系統(tǒng),則使用該結(jié)構(gòu)體,若不需要?jiǎng)t為空;me用于取值的消息id:讀取該me時(shí)候若需要從其他系統(tǒng)取值,則使用該消息id,若不需要?jiǎng)t為空;me用于取值的消息結(jié)構(gòu)體:讀取該me時(shí)候若需要從其他系統(tǒng)取值,則使用該結(jié)構(gòu)體,若不需要?jiǎng)t為空;me用于取當(dāng)前值的消息id:讀取該me當(dāng)前值時(shí)候若需要從其他系統(tǒng)取值,則使用該消息id,若不需要?jiǎng)t為空;me用于取當(dāng)前值的消息結(jié)構(gòu)體:讀取該me當(dāng)前值時(shí)候若需要從其他系統(tǒng)取值,則使用該結(jié)構(gòu)體,若不需要?jiǎng)t為空;me設(shè)置回調(diào)函數(shù);用于代碼中調(diào)用,若該me無此操作類型則為空;me取值回調(diào)函數(shù):用于代碼中調(diào)用,若該me無此操作類型則為空;me取當(dāng)前值回調(diào)函數(shù):用于代碼中調(diào)用,若該me無此操作類型則為空;me創(chuàng)建回調(diào)函數(shù):用于代碼中調(diào)用,若該me無此操作類型則為空;me刪除回調(diào)函數(shù):用于代碼中調(diào)用,若該me無此操作類型則為空;me手動(dòng)處理標(biāo)記:用于代碼中調(diào)用,判斷me是否需要手動(dòng)處理動(dòng)作,若該me不與其他me相關(guān),該標(biāo)記則為空;me是否支持mib(managementinformationbase,管理信息載體)上報(bào)的標(biāo)記:用于生成mib上報(bào)模塊代碼,若該me不支持mib上報(bào),則為空;該me通信的進(jìn)程名稱:用于代碼中發(fā)消息時(shí)候調(diào)用。(2)me中參數(shù)屬性如下:參數(shù)屬性的名稱:用于報(bào)文解析、參數(shù)處理部分的代碼調(diào)用;參數(shù)的數(shù)據(jù)類型:用于判斷該屬性是整型值或者字符串;參數(shù)在內(nèi)存中占用的長度:用于確定報(bào)文解析時(shí)候取值長度;參數(shù)是否為創(chuàng)建即保存標(biāo)記:用于確定創(chuàng)建回調(diào)函數(shù)中的代碼實(shí)現(xiàn);參數(shù)設(shè)置消息id:該屬性與其他系統(tǒng)通信的消息id,若該屬性無設(shè)置消息接口,則為空;參數(shù)設(shè)置消息結(jié)構(gòu)體:該屬性與其他系統(tǒng)通信的結(jié)構(gòu)體,若該屬性無設(shè)置消息接口,則為空;參數(shù)獲取消息id:該屬性與其他系統(tǒng)通信的消息id,若該屬性無獲取消息接口,則為空;參數(shù)獲取消息結(jié)構(gòu)體:該屬性與其他系統(tǒng)通信的結(jié)構(gòu)體,若該屬性無獲取消息接口,則為空;參數(shù)是否手動(dòng)處理標(biāo)記:該屬性報(bào)文是否需要與其他對象有關(guān)聯(lián)關(guān)系,若需要手動(dòng)分析,則設(shè)置該標(biāo)記;參數(shù)默認(rèn)值:該參數(shù)在初始化時(shí)候被設(shè)置成的值。步驟102,根據(jù)itu通信標(biāo)準(zhǔn)申明的me對象操作方法及屬性特性,從步驟101的me定義腳本中獲取me對象的表述來生成功能代碼,實(shí)現(xiàn)me功能實(shí)現(xiàn)腳本的設(shè)計(jì)。在本發(fā)明具體實(shí)施例中,根據(jù)itu-988規(guī)范標(biāo)準(zhǔn)申明的me對象操作方法及屬性特性,從步驟101的me定義腳本中獲取me對象的表述來生成功能代碼。me功能實(shí)現(xiàn)腳本在展開me定義腳本過程中,會(huì)根據(jù)定義腳本中的描述來初始化腳本變量,再依次以一個(gè)完整的me完成代碼生成。本步驟中,me功能實(shí)現(xiàn)腳本的規(guī)則主要生成以下幾個(gè)文件:協(xié)議棧公用函數(shù)源碼文件、協(xié)議棧me數(shù)據(jù)庫結(jié)構(gòu)體定義頭文件以及協(xié)議棧me私有函數(shù)接口源文件。圖2為本發(fā)明具體實(shí)施例中協(xié)議棧公用函數(shù)源碼文件的生成示意圖。如圖2所示,該協(xié)議棧公用函數(shù)源碼文件生成過程如下:步驟s21,獲取所有me列表;步驟s22,遍歷所有me列表;步驟s23,根據(jù)me的列表索引返回該me的最大參數(shù)個(gè)數(shù)、所有mib的初始化函數(shù)、根據(jù)me的列表索引返回該me信息的全局變量內(nèi)存地址、根據(jù)me的列表索引返回該me的本地?cái)?shù)據(jù)庫可寫內(nèi)存地址、根據(jù)me的列表索引返回該me的本地?cái)?shù)據(jù)庫可讀內(nèi)存地址、根據(jù)me的列表索引擦除該me的本地?cái)?shù)據(jù)庫數(shù)據(jù)、根據(jù)me的列表索引返回該me的數(shù)據(jù)長度、根據(jù)me的列表索引返回該me的操作支持類型、用于mib上報(bào)過程的me數(shù)據(jù)片段初始化函數(shù)。具體地,生成規(guī)則的文字表述為:1、根據(jù)me的列表索引返回該me的最大參數(shù)個(gè)數(shù):首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me的名稱宏定義,該名稱宏定義即為該me的最大參數(shù)個(gè)數(shù),從而實(shí)現(xiàn)該函數(shù)返回最大參數(shù)個(gè)數(shù)函數(shù);2、所有mib的初始化函數(shù):首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me的初始化函數(shù);3、根據(jù)me的列表索引返回該me信息的全局變量內(nèi)存地址:首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me的信息全局變量內(nèi)存地址函數(shù);4、根據(jù)me的列表索引返回該me的本地?cái)?shù)據(jù)庫可寫內(nèi)存地址:首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me的本地?cái)?shù)據(jù)庫可寫內(nèi)存地址函數(shù);5、根據(jù)me的列表索引返回該me的本地?cái)?shù)據(jù)庫可讀內(nèi)存地址:首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me的本地?cái)?shù)據(jù)庫可讀內(nèi)存地址函數(shù);6、根據(jù)me的列表索引擦除該me的本地?cái)?shù)據(jù)庫數(shù)據(jù):首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成擦除該me的本地?cái)?shù)據(jù)庫數(shù)據(jù)函數(shù);7、根據(jù)me的列表索引返回該me的數(shù)據(jù)長度:首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me數(shù)據(jù)長度讀取函數(shù);8、根據(jù)me的列表索引返回該me的操作支持類型:首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me支持的操作類型;9、用于mib上報(bào)過程的me數(shù)據(jù)片段初始化函數(shù):首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成所有me的數(shù)據(jù)片段讀取函數(shù);圖3為本發(fā)明具體實(shí)施例中協(xié)議棧me數(shù)據(jù)庫結(jié)構(gòu)體定義頭文件的生成示意圖。該文件中根據(jù)itu-988規(guī)范申明了所有me的結(jié)構(gòu)體,如圖3所示,協(xié)議棧me數(shù)據(jù)庫結(jié)構(gòu)體定義頭文件的生成過程如下:步驟s31,獲取me定義腳本中關(guān)于該me的名稱,用于申明該結(jié)構(gòu)體名稱;步驟s32,循環(huán)遍歷該me所有的參數(shù)屬性,依次判斷該參數(shù)屬性的數(shù)據(jù)類型。步驟s33,若為無符號(hào)字符型的參數(shù),則代碼生成以無符號(hào)字符型定義該屬性;若為無符號(hào)短整型的參數(shù),則代碼生成以無符號(hào)短整型定義該屬性;若為無符號(hào)整型的參數(shù),則代碼生成以無符號(hào)整型定義該屬性;若為字符串類型的參數(shù),則代碼生成以字符串類型定義該屬性步驟s34,返回步驟s32,直到該me所有的參數(shù)遍歷完畢。圖4為本發(fā)明具體實(shí)施例中協(xié)議棧me私有函數(shù)接口源文件的生成示意圖。在本發(fā)明中,協(xié)議棧me私有函數(shù)接口源文件是以me為區(qū)分,每個(gè)me都有一個(gè)對應(yīng)的私有函數(shù)接口源文件,且文件名稱包含該me名稱。該文件包含的函數(shù)主要有me設(shè)置回調(diào)函數(shù)、me取值回調(diào)函數(shù)、me創(chuàng)建回調(diào)函數(shù)、me刪除回調(diào)函數(shù)、omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù)、按me參數(shù)掩碼發(fā)消息函數(shù)。如圖4所示,協(xié)議棧me私有函數(shù)接口源文件的生成規(guī)則如下:1)獲取me定義腳本中該me的名稱、參數(shù)個(gè)數(shù)、參數(shù)手動(dòng)處理標(biāo)記、me手動(dòng)處理標(biāo)記、消息id、消息結(jié)構(gòu)體、me通信進(jìn)程名稱;2)生成me取值回調(diào)函數(shù):遍歷me表,即根據(jù)參數(shù)個(gè)數(shù),循環(huán)遍歷所有參數(shù),每個(gè)參數(shù)都擁有自己的掩碼作為執(zhí)行條件,若成立再判斷該參數(shù)的數(shù)據(jù)類型,根據(jù)無符號(hào)字符型、無符號(hào)短整型、無符號(hào)整形、字符串類型的不同長度,將數(shù)據(jù)庫中參數(shù)值拷貝到一段內(nèi)存中,組成回復(fù)的omci報(bào)文;3)生成omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù):遍歷me表,即根據(jù)參數(shù)個(gè)數(shù),循環(huán)遍歷所有參數(shù),每個(gè)參數(shù)都擁有自己的掩碼作為執(zhí)行條件,若成立再判斷該參數(shù)的數(shù)據(jù)類型,根據(jù)無符號(hào)字符型、無符號(hào)短整型、無符號(hào)整形、字符串類型分別做不同長度的內(nèi)存拷貝動(dòng)作,實(shí)現(xiàn)omci報(bào)文內(nèi)容到me參數(shù)值的轉(zhuǎn)換。4)生成按me參數(shù)掩碼發(fā)消息函數(shù):遍歷me表,即根據(jù)參數(shù)個(gè)數(shù),循環(huán)遍歷所有參數(shù),每個(gè)參數(shù)都擁有自己的掩碼作為執(zhí)行條件,若成立再判斷是否支持手動(dòng)處理,若支持手動(dòng)處理則生成手動(dòng)處理函數(shù),若不支持則使用該參數(shù)的消息id和me通信進(jìn)程名稱進(jìn)行消息的發(fā)送。5)生成me設(shè)置回調(diào)函數(shù):先調(diào)用omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù),把協(xié)議棧收到的報(bào)文轉(zhuǎn)化為me參數(shù);再調(diào)用參數(shù)保存函數(shù),將me參數(shù)保存到數(shù)據(jù)庫;然后判斷me手動(dòng)處理標(biāo)記是否有效,有效則調(diào)用me手動(dòng)處理函數(shù),無效則此時(shí)無需做處理;最后調(diào)用參數(shù)設(shè)置消息發(fā)送函數(shù)與其他系統(tǒng)通信,該參數(shù)設(shè)置消息發(fā)送函數(shù)用于將設(shè)置參數(shù)更改的事件通告給其他系統(tǒng)的消息函數(shù);6)生成me創(chuàng)建回調(diào)函數(shù):首先判斷me創(chuàng)建回調(diào)函數(shù)標(biāo)記是否有效,若無效則調(diào)用me刪除回調(diào)函數(shù),有效則調(diào)用omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù),把協(xié)議棧收到的報(bào)文轉(zhuǎn)化為me參數(shù);再調(diào)用參數(shù)保存函數(shù),將me參數(shù)保存到數(shù)據(jù)庫;然后判斷me手動(dòng)處理函數(shù)標(biāo)記是否有效,有效則調(diào)用me手動(dòng)創(chuàng)建函數(shù),無效則調(diào)用參數(shù)創(chuàng)建消息發(fā)送函數(shù),該參數(shù)創(chuàng)建消息發(fā)送函數(shù)用于將創(chuàng)建me的事件通告給其他系統(tǒng)的消息函數(shù);7)生成me刪除回調(diào)函數(shù):調(diào)用omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù),把協(xié)議棧收到的報(bào)文轉(zhuǎn)化為me參數(shù);然后判斷me手動(dòng)處理函數(shù)標(biāo)記是否有效,有效則調(diào)用me手動(dòng)刪除函數(shù),無效則調(diào)用參數(shù)刪除消息發(fā)送函數(shù),該參數(shù)刪除消息發(fā)送函數(shù)用于將刪除me的事件通告給其他系統(tǒng)的消息函數(shù);步驟103,采用me定義腳本和me功能實(shí)現(xiàn)腳本協(xié)同的方式,實(shí)現(xiàn)omci協(xié)議棧代碼的自動(dòng)生成。在本發(fā)明具體實(shí)施例中,本發(fā)明之實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的方法利用tcl腳本技術(shù),采用me定義腳本和me功能實(shí)現(xiàn)腳本協(xié)同的方式,實(shí)現(xiàn)omci協(xié)議棧代碼的自動(dòng)生成,這樣開發(fā)人員只需要維護(hù)me定義腳本和me功能實(shí)現(xiàn)腳本這兩個(gè)文件即可,可大大減少了人為寫代碼的工作量,且便于后續(xù)的維護(hù)及調(diào)試。圖5為本發(fā)明一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的系統(tǒng)的系統(tǒng)架構(gòu)圖。如圖5所示,本發(fā)明一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的系統(tǒng),包括:me定義腳本設(shè)計(jì)單元501、me功能實(shí)現(xiàn)腳本設(shè)計(jì)單元502以及代碼自動(dòng)生成單元503。me定義腳本設(shè)計(jì)單元501,用于根據(jù)itu通信標(biāo)準(zhǔn)列出的me(managedentity,管理單元)對象,對me對象進(jìn)行定義申明,實(shí)現(xiàn)me定義腳本的設(shè)計(jì)。在本發(fā)明具體實(shí)施里中,me定義腳本設(shè)計(jì)單元501根據(jù)itu-988規(guī)范標(biāo)準(zhǔn)列出的me對象,設(shè)計(jì)一套描述該me對象的表述方法me定義腳本的腳本文件是對me對象的定義申明,me定義包括兩個(gè)部分,首先是關(guān)于該me的全局屬性的定義,其次是該me中所有參數(shù)的屬性定義。在本發(fā)明具體實(shí)施例中,不同me按順序排列,并且以tablebegin開始,以tableend結(jié)尾,同個(gè)me下的不同參數(shù),則以attributebegin開始,以attributeend結(jié)尾。(1)me的全局屬性如下:me的名稱:用于生成相關(guān)函數(shù)、結(jié)構(gòu)體、消息的名稱;me最大的實(shí)例數(shù):用于程序初始化內(nèi)存時(shí)候;me在itu-988標(biāo)準(zhǔn)中定義的id(identifier,身份標(biāo)示值):用于判斷me身份;me支持的操作類型:在程序接收報(bào)文入口處判斷是否支持相應(yīng)操作;me用于創(chuàng)建的消息id:創(chuàng)建該me時(shí)候若需要通知其他系統(tǒng),則使用該消息id,若不需要?jiǎng)t為空;me用于創(chuàng)建的消息結(jié)構(gòu)體:創(chuàng)建該me時(shí)候若需要通知其他系統(tǒng),則使用該結(jié)構(gòu)體傳輸數(shù)據(jù),若不需要?jiǎng)t為空;me用于刪除的消息id:刪除該me時(shí)候若需要通知其他系統(tǒng),則使用該消息id,若不需要?jiǎng)t為空;me用于刪除的消息結(jié)構(gòu)體:刪除該me時(shí)候若需要通知其他系統(tǒng),則使用該結(jié)構(gòu)體,若不需要?jiǎng)t為空;me用于取值的消息id:讀取該me時(shí)候若需要從其他系統(tǒng)取值,則使用該消息id,若不需要?jiǎng)t為空;me用于取值的消息結(jié)構(gòu)體:讀取該me時(shí)候若需要從其他系統(tǒng)取值,則使用該結(jié)構(gòu)體,若不需要?jiǎng)t為空;me用于取當(dāng)前值的消息id:讀取該me當(dāng)前值時(shí)候若需要從其他系統(tǒng)取值,則使用該消息id,若不需要?jiǎng)t為空;me用于取當(dāng)前值的消息結(jié)構(gòu)體:讀取該me當(dāng)前值時(shí)候若需要從其他系統(tǒng)取值,則使用該結(jié)構(gòu)體,若不需要?jiǎng)t為空;me設(shè)置回調(diào)函數(shù);用于代碼中調(diào)用,若該me無此操作類型則為空;me取值回調(diào)函數(shù):用于代碼中調(diào)用,若該me無此操作類型則為空;me取當(dāng)前值回調(diào)函數(shù):用于代碼中調(diào)用,若該me無此操作類型則為空;me創(chuàng)建回調(diào)函數(shù):用于代碼中調(diào)用,若該me無此操作類型則為空;me刪除回調(diào)函數(shù):用于代碼中調(diào)用,若該me無此操作類型則為空;me手動(dòng)處理標(biāo)記:用于代碼中調(diào)用,判斷me是否需要手動(dòng)處理動(dòng)作,若該me不與其他me相關(guān),該標(biāo)記則為空;me是否支持mib(managementinformationbase,管理信息載體)上報(bào)的標(biāo)記:用于生成mib上報(bào)模塊代碼,若該me不支持mib上報(bào),則為空;該me通信的進(jìn)程名稱:用于代碼中發(fā)消息時(shí)候調(diào)用。(2)me中參數(shù)屬性如下:參數(shù)屬性的名稱:用于報(bào)文解析、參數(shù)處理部分的代碼調(diào)用;參數(shù)的數(shù)據(jù)類型:用于判斷該屬性是整型值或者字符串;參數(shù)在內(nèi)存中占用的長度:用于確定報(bào)文解析時(shí)候取值長度;參數(shù)是否為創(chuàng)建即保存標(biāo)記:用于確定創(chuàng)建回調(diào)函數(shù)中的代碼實(shí)現(xiàn);參數(shù)設(shè)置消息id:該屬性與其他系統(tǒng)通信的消息id,若該屬性無設(shè)置消息接口,則為空;參數(shù)設(shè)置消息結(jié)構(gòu)體:該屬性與其他系統(tǒng)通信的結(jié)構(gòu)體,若該屬性無設(shè)置消息接口,則為空;參數(shù)獲取消息id:該屬性與其他系統(tǒng)通信的消息id,若該屬性無獲取消息接口,則為空;參數(shù)獲取消息結(jié)構(gòu)體:該屬性與其他系統(tǒng)通信的結(jié)構(gòu)體,若該屬性無獲取消息接口,則為空;參數(shù)是否手動(dòng)處理標(biāo)記:該屬性報(bào)文是否需要與其他對象有關(guān)聯(lián)關(guān)系,若需要手動(dòng)分析,則設(shè)置該標(biāo)記參數(shù)默認(rèn)值:該參數(shù)在初始化時(shí)候被設(shè)置成的值。me功能實(shí)現(xiàn)腳本設(shè)計(jì)單元502,用于根據(jù)itu通信標(biāo)準(zhǔn)申明的me對象操作方法及屬性特性,從me定義腳本設(shè)計(jì)單元501的me定義腳本中獲取me對象的表述來生成功能代碼,實(shí)現(xiàn)me功能實(shí)現(xiàn)腳本的設(shè)計(jì)。在本發(fā)明具體實(shí)施例中,me功能實(shí)現(xiàn)腳本設(shè)計(jì)單元502根據(jù)itu-988規(guī)范標(biāo)準(zhǔn)申明的me對象操作方法及屬性特性,從me定義腳本設(shè)計(jì)單元501的me定義腳本中獲取me對象的表述來生成功能代碼。me功能實(shí)現(xiàn)腳本在展開me定義腳本過程中,會(huì)根據(jù)定義腳本中的描述來初始化腳本變量,再依次以一個(gè)完整的me完成代碼生成。me功能實(shí)現(xiàn)腳本的規(guī)則主要生成以下幾個(gè)文件:協(xié)議棧公用函數(shù)源碼文件、協(xié)議棧me數(shù)據(jù)庫結(jié)構(gòu)體定義頭文件以及協(xié)議棧me私有函數(shù)接口源文件。該協(xié)議棧公用函數(shù)源碼文件中均為協(xié)議棧公用的函數(shù),包括根據(jù)me的列表索引返回該me的最大參數(shù)個(gè)數(shù)、所有mib的初始化函數(shù)、根據(jù)me的列表索引返回該me信息的全局變量內(nèi)存地址、根據(jù)me的列表索引返回該me的本地?cái)?shù)據(jù)庫可寫內(nèi)存地址、根據(jù)me的列表索引返回該me的本地?cái)?shù)據(jù)庫可讀內(nèi)存地址、根據(jù)me的列表索引擦除該me的本地?cái)?shù)據(jù)庫數(shù)據(jù)、根據(jù)me的列表索引返回該me的數(shù)據(jù)長度、根據(jù)me的列表索引返回該me的操作支持類型、用于mib上報(bào)過程的me數(shù)據(jù)片段初始化函數(shù)。具體地,該協(xié)議棧公用函數(shù)源碼文件生成規(guī)則如下:1、根據(jù)me的列表索引返回該me的最大參數(shù)個(gè)數(shù):首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me的名稱宏定義,該名稱宏定義即為該me的最大參數(shù)個(gè)數(shù),從而實(shí)現(xiàn)該函數(shù)返回最大參數(shù)個(gè)數(shù)函數(shù);2、所有mib的初始化函數(shù):首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me的初始化函數(shù);3、根據(jù)me的列表索引返回該me信息的全局變量內(nèi)存地址:首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me的信息全局變量內(nèi)存地址函數(shù);4、根據(jù)me的列表索引返回該me的本地?cái)?shù)據(jù)庫可寫內(nèi)存地址:首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me的本地?cái)?shù)據(jù)庫可寫內(nèi)存地址函數(shù);5、根據(jù)me的列表索引返回該me的本地?cái)?shù)據(jù)庫可讀內(nèi)存地址:首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me的本地?cái)?shù)據(jù)庫可讀內(nèi)存地址函數(shù);6、根據(jù)me的列表索引擦除該me的本地?cái)?shù)據(jù)庫數(shù)據(jù):首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成擦除該me的本地?cái)?shù)據(jù)庫數(shù)據(jù)函數(shù);7、根據(jù)me的列表索引返回該me的數(shù)據(jù)長度:首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me數(shù)據(jù)長度讀取函數(shù);8、根據(jù)me的列表索引返回該me的操作支持類型:首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成具體me支持的操作類型;9、用于mib上報(bào)過程的me數(shù)據(jù)片段初始化函數(shù):首先獲取所有me的名稱列表,逐個(gè)遍歷me,同時(shí)生成所有me的數(shù)據(jù)片段讀取函數(shù);協(xié)議棧me數(shù)據(jù)庫結(jié)構(gòu)體定義頭文件根據(jù)itu-988規(guī)范申明了所有me的結(jié)構(gòu)體,其生成規(guī)則如下:1、獲取me定義腳本中關(guān)于該me的名稱,用于申明該結(jié)構(gòu)體名稱;2、循環(huán)遍歷該me所有的參數(shù)屬性,依次判斷該參數(shù)屬性的數(shù)據(jù)類型。3、若為無符號(hào)字符型的參數(shù),則代碼生成以無符號(hào)字符型定義該屬性;若為無符號(hào)短整型的參數(shù),則代碼生成以無符號(hào)短整型定義該屬性;若為無符號(hào)整型的參數(shù),則代碼生成以無符號(hào)整型定義該屬性;若為字符串類型的參數(shù),則代碼生成以字符串類型定義該屬性,直到該me所有的參數(shù)遍歷完畢。在本發(fā)明中,協(xié)議棧me私有函數(shù)接口源文件是以me為區(qū)分,每個(gè)me都有一個(gè)對應(yīng)的私有函數(shù)接口源文件,且文件名稱包含該me名稱。該文件包含的函數(shù)主要有me設(shè)置回調(diào)函數(shù)、me取值回調(diào)函數(shù)、me創(chuàng)建回調(diào)函數(shù)、me刪除回調(diào)函數(shù)、omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù)、按me參數(shù)掩碼發(fā)消息函數(shù)。具體地,協(xié)議棧me私有函數(shù)接口源文件的生成規(guī)則如下:1)獲取me定義腳本中該me的名稱、參數(shù)個(gè)數(shù)、參數(shù)手動(dòng)處理標(biāo)記、me手動(dòng)處理標(biāo)記、消息id、消息結(jié)構(gòu)體、me通信進(jìn)程名稱;2)生成me取值回調(diào)函數(shù):遍歷me表,即根據(jù)參數(shù)個(gè)數(shù),循環(huán)遍歷所有參數(shù),每個(gè)參數(shù)都擁有自己的掩碼作為執(zhí)行條件,若成立再判斷該參數(shù)的數(shù)據(jù)類型,根據(jù)無符號(hào)字符型、無符號(hào)短整型、無符號(hào)整形、字符串類型的不同長度,將數(shù)據(jù)庫中參數(shù)值拷貝到一段內(nèi)存中,組成回復(fù)的omci報(bào)文;3)生成omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù):遍歷me表,即根據(jù)參數(shù)個(gè)數(shù),循環(huán)遍歷所有參數(shù),每個(gè)參數(shù)都擁有自己的掩碼作為執(zhí)行條件,若成立再判斷該參數(shù)的數(shù)據(jù)類型,根據(jù)無符號(hào)字符型、無符號(hào)短整型、無符號(hào)整形、字符串類型分別做不同長度的內(nèi)存拷貝動(dòng)作,實(shí)現(xiàn)omci報(bào)文內(nèi)容到me參數(shù)值的轉(zhuǎn)換。4)生成按me參數(shù)掩碼發(fā)消息函數(shù):遍歷me表,即根據(jù)參數(shù)個(gè)數(shù),循環(huán)遍歷所有參數(shù),每個(gè)參數(shù)都擁有自己的掩碼作為執(zhí)行條件,若成立再判斷是否支持手動(dòng)處理,若支持手動(dòng)處理則生成手動(dòng)處理函數(shù),若不支持則使用該參數(shù)的消息id和me通信進(jìn)程名稱進(jìn)行消息的發(fā)送。5)生成me設(shè)置回調(diào)函數(shù):先調(diào)用omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù),把協(xié)議棧收到的報(bào)文轉(zhuǎn)化為me參數(shù);再調(diào)用參數(shù)保存函數(shù),將me參數(shù)保存到數(shù)據(jù)庫;然后判斷me手動(dòng)處理標(biāo)記是否有效,有效則調(diào)用me手動(dòng)處理函數(shù),無效則此時(shí)無需做處理;最后調(diào)用參數(shù)設(shè)置消息發(fā)送函數(shù)與其他系統(tǒng)通信,該參數(shù)設(shè)置消息發(fā)送函數(shù)用于將設(shè)置參數(shù)更改的事件通告給其他系統(tǒng)的消息函數(shù);6)生成me創(chuàng)建回調(diào)函數(shù):首先判斷me創(chuàng)建回調(diào)函數(shù)標(biāo)記是否有效,若無效則調(diào)用me刪除回調(diào)函數(shù),有效則調(diào)用omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù),把協(xié)議棧收到的報(bào)文轉(zhuǎn)化為me參數(shù);再調(diào)用參數(shù)保存函數(shù),將me參數(shù)保存到數(shù)據(jù)庫;然后判斷me手動(dòng)處理函數(shù)標(biāo)記是否有效,有效則調(diào)用me手動(dòng)創(chuàng)建函數(shù),無效則調(diào)用參數(shù)創(chuàng)建消息發(fā)送函數(shù),該參數(shù)創(chuàng)建消息發(fā)送函數(shù)用于將創(chuàng)建me的事件通告給其他系統(tǒng)的消息函數(shù);7)生成me刪除回調(diào)函數(shù):調(diào)用omci報(bào)文轉(zhuǎn)me參數(shù)函數(shù),把協(xié)議棧收到的報(bào)文轉(zhuǎn)化為me參數(shù);然后判斷me手動(dòng)處理函數(shù)標(biāo)記是否有效,有效則調(diào)用me手動(dòng)刪除函數(shù),無效則調(diào)用參數(shù)刪除消息發(fā)送函數(shù),該參數(shù)刪除消息發(fā)送函數(shù)用于將刪除me的事件通告給其他系統(tǒng)的消息函數(shù);代碼自動(dòng)生成單元503,用于采用me定義腳本和me功能實(shí)現(xiàn)腳本協(xié)同的方式,實(shí)現(xiàn)omci協(xié)議棧代碼的自動(dòng)生成。綜上所述,本發(fā)明一種實(shí)現(xiàn)omci協(xié)議棧代碼自動(dòng)生成的方法及系統(tǒng)通過設(shè)計(jì)me定義腳本和me功能實(shí)現(xiàn)腳本,采用me定義腳本和me功能實(shí)現(xiàn)腳本協(xié)同的方式,實(shí)現(xiàn)了omci協(xié)議棧代碼的自動(dòng)生成,使得開發(fā)人員只需要維護(hù)me定義腳本和me功能實(shí)現(xiàn)腳本這兩個(gè)文件,大大減少了人為寫代碼的工作量,且便于后續(xù)的維護(hù)及調(diào)試。任何本領(lǐng)域技術(shù)人員均可在不違背本發(fā)明的精神及范疇下,對上述實(shí)施例進(jìn)行修飾與改變。因此,本發(fā)明的權(quán)利保護(hù)范圍,應(yīng)如權(quán)利要求書所列。當(dāng)前第1頁12當(dāng)前第1頁12