Oam協(xié)議棧編碼方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種OAM協(xié)議棧編碼方法。所述OAM協(xié)議棧編碼方法包括:設置對象定義模塊;根據(jù)所述對象定義模板對OAM對象進行定義OAM對象相關屬性值;根據(jù)定義的所述OAM對象相關屬性值生成OAM協(xié)議棧相關的代碼。所述OAM協(xié)議棧相關的代碼包括:協(xié)議棧公用函數(shù)源碼、協(xié)議棧對象的設置函數(shù)代碼、以及協(xié)議棧對象的取值函數(shù)代碼。本發(fā)明的技術方案能夠自動實現(xiàn)部分OAM協(xié)議棧相關代碼的自動生成,不僅大大提供了代碼的書寫效率,縮短了項目開發(fā)周期,而且自動生成的代碼的準確性、清晰性也得到了增強,為后期的二次開發(fā)及維護提供了極大的便利。
【專利說明】OAM協(xié)議棧編碼方法及系統(tǒng)
【技術領域】
[0001] 本發(fā)明涉及一種協(xié)議編碼,特別是涉及一種0ΑΜ協(xié)議編碼方法及系統(tǒng)。
【背景技術】
[0002] 在通信系統(tǒng)中,協(xié)議棧的開發(fā)一直是軟件工程師的一個繁重的工作任務。由于協(xié) 議棧的特殊性,不可避免的會有很多重復性的代碼需要書寫,這極大的增加了軟件工程師 的工作量,常常因此而拉長了項目的開發(fā)周期,增加項目的開發(fā)難度。
[0003] 在 EPON(Ethernet Passive Optical Network,以太網(wǎng)無源光網(wǎng)絡)系統(tǒng)中, ONU (Optical Network Unit,光網(wǎng)絡單兀)通過 0AM (Operation Administation and Maintenance,操作、管理和維護)注冊發(fā)現(xiàn)機制,注冊到0LT(Optical Line Terminal,光線 路終端),此時如果〇LT認定0NU身份合法有效,則0NU上線。0LT可以管理上線的0NU,包 括對0NU進行軟件升級、動態(tài)帶寬分配等操作,但其中最重要的是業(yè)務的下發(fā)和狀態(tài)信息 的監(jiān)控讀取等操作。通常業(yè)務的下發(fā)和狀態(tài)信息的監(jiān)控讀取等操作需要都通過0ΑΜ對象的 屬性設置和取值操作來完成。由于ΕΡ0Ν系統(tǒng)中需要大量使用0ΑΜ協(xié)議棧,從而使得在ΕΡ0Ν 系統(tǒng)中0ΑΜ協(xié)議棧編寫的工作量巨大。
[0004] 鑒于此,如何在滿足0ΑΜ協(xié)議棧功能實現(xiàn)的基礎上,降低0ΑΜ協(xié)議棧的編碼工作 量,成為本領域技術人員亟待解決的問題。
【發(fā)明內容】
[0005] 鑒于以上所述現(xiàn)有技術的缺點,本發(fā)明的目的在于提供一種0ΑΜ協(xié)議棧編碼方法 及系統(tǒng),用于解決現(xiàn)有技術中0ΑΜ協(xié)議棧開發(fā)的工作量巨大,代碼書寫效率低且開發(fā)的代 碼不便于后續(xù)維護的問題。
[0006] 為實現(xiàn)上述目的及其他相關目的,本發(fā)明提供一種0ΑΜ協(xié)議棧編碼方法。所述0ΑΜ 協(xié)議棧編碼方法包括:設置對象定義模塊;根據(jù)所述對象定義模板對0ΑΜ對象進行定義0ΑΜ 對象相關屬性值;根據(jù)定義的所述0ΑΜ對象相關屬性值生成0ΑΜ協(xié)議棧相關的代碼。
[0007] 可選地,所述對象定義模板包括:對對象的全局屬性以及對象的參數(shù)的定義;所 述對象的全局屬性包括:對象的名稱、對象Branch值、以及對象Leaf值;所述對象的參數(shù) 屬性包括:參數(shù)的名稱、參數(shù)的數(shù)據(jù)類型、以及參數(shù)在內存中占用的長度。
[0008] 可選地,所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧公用函數(shù)源碼;所述協(xié)議棧公用 函數(shù)源碼包括協(xié)議棧對象的結構體;所述結構體代碼的生成是根據(jù)每一個所述0ΑΜ對象定 義生成一個結構體實例
[0009] 可選地,所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧公用函數(shù)源碼;所述協(xié)議棧公用 函數(shù)源碼包括協(xié)議棧對象的結構體數(shù)組聲明、以及取對象數(shù)函數(shù);所述結構體數(shù)組聲明代 碼的生成是根據(jù)每一個所述0ΑΜ對象定義生成一個結構體實例,所有的所述結構體實例組 成結構體數(shù)組聲明;所述取對象數(shù)函數(shù)返回所述結構體數(shù)組中的對象數(shù)目。
[0010] 可選地,所述根據(jù)每一個所述0ΑΜ對象定義生成一個結構體的具體實現(xiàn)包括:根 據(jù)所述對象的名稱、所述對象Branch值、對象Leaf值生成一個結構體實例;所述結構體實 例包括相應對象的Branch、Leaf、設置函數(shù)、以及取值函數(shù)。
[0011] 可選地,所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧對象的設置函數(shù)代碼;所述設置 函數(shù)輸入的參數(shù)包括回復報文內存指針、設置報文有效數(shù)據(jù)字段指針、以及對象實例號;所 述對象實例號用于確定所述0ΑΜ對象;所述0ΑΜ對象的全局屬性還包括:設置消息ID、設 置消息結構體、手動設置標記以及目的進程ID ;當所述0ΑΜ對象的手動設置標識不為預設 的手動設置標識時,生成的所述設置函數(shù)代碼包括:根據(jù)所述設置報文有效數(shù)據(jù)字段指針 獲取所述0ΑΜ對象的相應屬性值,并將所述0ΑΜ對象的相應屬性值填寫到所述0ΑΜ對象的 設置消息結構體中;根據(jù)所述0ΑΜ對象的設置消息ID、設置消息結構體以及目的進程ID生 成設置消息發(fā)送給目標進程;根據(jù)所述目標進程的設置回復消息確定設置回復碼;將所述 0ΑΜ對象的Branch值、Leaf值以及所述設置回復碼填寫到所述回復報文內存指針確定的相 應位置。
[0012] 可選地,當所述0ΑΜ對象的對象手動設置標識為預設的手動設置標識時,則生成 的所述設置函數(shù)為空函數(shù),此時所述設置函數(shù)需人工處理。
[0013] 可選地,所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧對象的取值函數(shù)代碼;所述取值 函數(shù)輸入的參數(shù)包括回復報文內存指針、取值報文有效數(shù)據(jù)字段指針、以及對象實例號;所 述對象實例號用于確定所述0ΑΜ對象;所述0ΑΜ對象的全局屬性還包括:取值消息ID、取值 消息結構體、手動取值標記以及目的進程ID ;當所述0ΑΜ對象的手動取值標識為預設的手 動取值標識時,生成的所述取值函數(shù)代碼包括:根據(jù)所述0ΑΜ對象的取值消息ID、取值消息 結構體以及目的進程ID生成取值消息發(fā)送給目標進程;根據(jù)所述目標進程的取值回復消 息獲取所述0ΑΜ對象的相應屬性值,并將所述0ΑΜ對象Branch值、Leaf值以及所獲取的所 述0ΑΜ對象的相應屬性值填充到所述回復報文內存指針確定的相應位置。
[0014] 可選地,所當所述0ΑΜ對象的對象手動取值標識為預設的手動取值標識時,則生 成的所述取值函數(shù)為空函數(shù),此時所述設置函數(shù)需人工處理。
[0015] 本發(fā)明還提供一種0ΑΜ協(xié)議棧編碼系統(tǒng)。所述0ΑΜ協(xié)議棧編碼系統(tǒng)包括:模板定 義模塊,用于設置對象定義模塊;對象定義模塊,與所述模板定義模塊相連,用于根據(jù)所述 對象定義模板對0ΑΜ對象進行定義0ΑΜ對象相關屬性值;代碼生成模塊,與所述對象定義模 塊相連,用于根據(jù)定義的所述0ΑΜ對象相關屬性值生成0ΑΜ協(xié)議棧相關的代碼。
[0016] 可選地,所述模板定義模塊中的所述對象定義模板包括:對對象的全局屬性以及 對象的參數(shù)的定義;所述對象的全局屬性包括:對象的名稱、對象Branch值、以及對象Leaf 值;所述對象的參數(shù)屬性包括:參數(shù)的名稱、參數(shù)的數(shù)據(jù)類型、以及參數(shù)在內存中占用的長 度。
[0017] 可選地,所述代碼生成模塊中的所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧公用函 數(shù)源碼;所述協(xié)議棧公用函數(shù)源碼包括協(xié)議棧對象的結構體數(shù)組聲明、以及取對象函數(shù); 所述結構體數(shù)組聲明代碼的生成是根據(jù)每一個所述0ΑΜ對象定義生成一個結構體實例,所 有的所述結構體實例組成結構體數(shù)組聲明;所述取對象函數(shù)返回所述結構體數(shù)組中的對象 數(shù)目。
[0018] 可選地,所述代碼生成模塊中的所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧公用函 數(shù)源碼;所述協(xié)議棧公用函數(shù)源碼包括協(xié)議棧對象的結構體;所述結構體代碼的生成是根 據(jù)每一個所述OAM對象定義生成一個結構體實例。
[0019] 可選地,所述結構體實例包括相應對象的BrancKLeaf、設置函數(shù)、以及取值函數(shù); 所述代碼生成模塊中的所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧對象的設置函數(shù)代碼;所 述設置函數(shù)輸入的參數(shù)包括回復報文內存指針、設置報文有效數(shù)據(jù)字段指針、以及對象實 例號;所述對象實例號用于確定所述0ΑΜ對象;所述0ΑΜ對象的全局屬性還包括:設置消息 ID、設置消息結構體、手動設置標記以及目的進程ID ;當所述0ΑΜ對象的手動設置標識不為 預設的手動設置標識時,生成的所述設置函數(shù)代碼包括:根據(jù)所述設置報文有效數(shù)據(jù)字段 指針獲取所述0ΑΜ對象的相應屬性值,并將所述0ΑΜ對象的相應屬性值填寫到所述0ΑΜ對 象的設置消息結構體中;根據(jù)所述0ΑΜ對象的設置消息ID、設置消息結構體以及目的進程 ID生成設置消息發(fā)送給目標進程;根據(jù)所述目標進程的設置回復消息確定設置回復碼;將 所述0ΑΜ對象的Branch值、Leaf值以及所述設置回復碼填寫到所述回復報文內存指針確 定的相應位置。
[0020] 可選地,所述結構體實例包括相應對象的BrancKLeaf、設置函數(shù)、以及取值函數(shù); 所述代碼生成模塊中的所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧對象的取值函數(shù)代碼;所 述取值函數(shù)輸入的參數(shù)包括回復報文內存指針、取值報文有效數(shù)據(jù)字段指針、以及對象實 例號;所述對象實例號用于確定所述0ΑΜ對象;所述0ΑΜ對象的全局屬性還包括:取值消息 ID、取值消息結構體、手動取值標記以及目的進程ID ;當所述0ΑΜ對象的手動取值標識為預 設的手動取值標識時,生成的所述取值函數(shù)代碼包括:根據(jù)所述0ΑΜ對象的取值消息ID、取 值消息結構體以及目的進程ID生成取值消息發(fā)送給目標進程;根據(jù)所述目標進程的取值 回復消息獲取所述0ΑΜ對象的相應屬性值,并將所述0ΑΜ對象Branch值、Leaf值以及所獲 取的所述0ΑΜ對象的相應屬性值填充到所述回復報文內存指針確定的相應位置。
[0021] 如上所述,本發(fā)明的一種0ΑΜ協(xié)議棧編碼方法及系統(tǒng),具有以下有益效果:能夠自 動實現(xiàn)部分0ΑΜ協(xié)議棧相關代碼的自動生成,不僅大大提供了代碼的書寫效率,縮短了項 目開發(fā)周期,而且自動生成的代碼的準確性、清晰性也得到了增強,為后期的二次開發(fā)及維 護提供了極大的便利。
【專利附圖】
【附圖說明】
[0022] 圖1顯示為本發(fā)明的一種0ΑΜ協(xié)議棧編碼方法的一實施例的方法流程示意圖。
[0023] 圖2顯示為本發(fā)明的一種0ΑΜ協(xié)議棧編碼方法的一實施例的方法流程示意圖。
[0024] 圖3顯示為本發(fā)明的一種0ΑΜ協(xié)議棧編碼方法的一實施例的方法流程示意圖。
[0025] 圖4顯不為本發(fā)明的一種0ΑΜ協(xié)議棧編碼系統(tǒng)的一實施例的模塊結構不意圖。
[0026] 元件標號說明
[0027] 1 0ΑΜ協(xié)議棧編碼系統(tǒng)
[0028] 11 模板定義模塊
[0029] 12 對象定義模塊
[0030] 13 代碼生成模塊
[0031] S1 ?S3 步驟
【具體實施方式】
[0032] 以下通過特定的具體實例說明本發(fā)明的實施方式,本領域技術人員可由本說明書 所揭露的內容輕易地了解本發(fā)明的其他優(yōu)點與功效。本發(fā)明還可以通過另外不同的具體實 施方式加以實施或應用,本說明書中的各項細節(jié)也可以基于不同觀點與應用,在沒有背離 本發(fā)明的精神下進行各種修飾或改變。
[0033] 需要說明的是,本實施例中所提供的圖示僅以示意方式說明本發(fā)明的基本構想, 遂圖式中僅顯示與本發(fā)明中有關的組件而非按照實際實施時的組件數(shù)目、形狀及尺寸繪 制,其實際實施時各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可 能更為復雜。
[0034] 為實現(xiàn)上述目的及其他相關目的,本發(fā)明提供一種0ΑΜ協(xié)議棧編碼方法。如圖1 所示,在一個實施例中,所述0ΑΜ協(xié)議棧編碼方法包括:
[0035] 步驟S1,設置對象定義模塊。具體地,所述對象定義模板包括:對對象的全局 屬性以及對象的參數(shù)的定義;所述對象的全局屬性包括:對象的名稱(objectName)、對 象Branch值(Branch)、以及對象Leaf值(Leaf);所述對象的參數(shù)屬性包括:參數(shù)的名 稱(varlname)、參數(shù)的數(shù)據(jù)類型(dataType)、以及參數(shù)在內存中占用的長度(len)。在 一個實施例中,所述對象的全局屬性還包括:設置消息ID(setM SgId)、設置消息結構體 (setStruct)、手動設置標記(setspechandler)、取值消息ID(getMsgld)、取值消息結構體 (getStruct)、手動取值標記(getspechandler)以及目的進程 ID(APPL_ID)。
[0036] 在一個實施例中,所述對象定義模板具體如下所示:
[0037] OBJECT-START SETOBJECT objectName Branch Leaf APPLTD setMsgld setStruct getMsgld getStruct getspechandler setspechandler SET-OBJECT-VARIABLE varlname len dataType 0BJECT_END
[0038] 其中:
[0039] OBJECT_START:對象定義起始腳本進程調用 SETJ)BJFCT:對象特征定義腳本進程調用 objectName:對象特征定義中的對象名稱 Branch:對象特征定義中的枝節(jié)點值 Leaf:對象特征定義中的葉節(jié)點值 APPL+ID:對象特征定義中的發(fā)送消息目的進程ID setMsgld:對象特征定義中的發(fā)送設置消息ID setStruct:對象特征定義中的發(fā)送設置消息結構體 getMsgld:對象特征定義中的發(fā)送取值消息ID getStruct:對象特征定義中的發(fā)送取值消息結構體 getspechandler:對象特征定義中的是否需要調用手動書寫的取值函數(shù) setspechandler:對象特征定義中的是否需要調用手動書寫的設置函數(shù) SETLOBJECTJARIABLE:對象屬性定義腳本進程調用,若是多屬性,則每個屬性依次調用 varlname:對象屬性定義中的屬性名稱 len:對象屬性定義中的屬性值在OAM報文中的占用長度 dataType:對象屬性定義中的屬性數(shù)據(jù)類型 OBJECT+END:對象定義完結腳本進程調用
[0040] 步驟S2,根據(jù)所述對象定義模板對0ΑΜ對象進行定義0ΑΜ對象相關屬性值。具體 地,根據(jù)IEEE802. 3規(guī)范標準列出的0ΑΜ對象,遵照所述對象定義模板對所述0ΑΜ對象相 關屬性值進行定義。具體地,所述參數(shù)屬性SET_OBJECT_VARIALBE對參數(shù)的定義取決于協(xié) 議規(guī)范標準,可以包括1個參數(shù)或多個參數(shù)的情況。在特殊情況下,也可以為空,即沒有參 數(shù)的情況。在一個實施例中,如0ΑΜ協(xié)議操作對象aFECmode,它在規(guī)范標準中由Branch值 和Leaf值唯一確定它的身份;而且有一個參數(shù)屬性fecmode,數(shù)據(jù)類型是無符號整型。那 么,遵照所述對象定義模板對所述0ΑΜ協(xié)議操作對象aFECmode對象相關屬性的定義如下所 示:
[0041] OBJECT-START SETJ3BJECT aFECmode 0x07 0x013A APPL_EP0N MSG_ID_EP0N_P0RT_SET_fecMode MSG_STRUCT_EPON_PORT_fecMode_SET MSG-ID-ΕΡ0Ν-PORT-GET-fecMode MSG_STRUCT_EP0N_P0RT_fecMode_GET getspechandler setspechandler SET-OBJECT-VARIABLE fecMode 4 0AM-TYPE-UINT32 OBJECT-END
[0042] 需要注意的是,如MSG_ID_EP0N_P0RT_SET_fecMode (設置消息ID)是根據(jù)0AM協(xié) 議棧實際應用的系統(tǒng)確定的,并不屬于協(xié)議規(guī)范標準的內容。當0AM對象屬性在我們實際 應用的系統(tǒng)中存在對應的設置消息ID時,即意味著存在系統(tǒng)操作接口,此時,我們需要使 用該設置消息ID。反之,如果系統(tǒng)中不存在對應的設置消息ID,則我們僅需要保留模板中 的"setMsgld"關鍵字即可。其他相關屬性值的處理也類似,如果所述屬性值在系統(tǒng)中有對 應的相關值,則取其值;否則,保留模板中的關鍵字。在一個實施例中,所述參數(shù)屬性可以為 空,此時表示該0ΑΜ對象不存在參數(shù)變量。
[0043] 步驟S3,根據(jù)定義的所述0ΑΜ對象相關屬性值生成0ΑΜ協(xié)議棧相關的代碼。在一 個實施例中,所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧公用函數(shù)源碼;所述協(xié)議棧公用函 數(shù)源碼包括協(xié)議棧對象的結構體;所述結構體代碼的生成是根據(jù)每一個所述0ΑΜ對象定義 生成一個結構體實例。在一個實施例中,所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧公用函 數(shù)源碼;所述協(xié)議棧公用函數(shù)源碼包括協(xié)議棧對象的結構體數(shù)組聲明、以及取對象數(shù)函數(shù); 所述結構體數(shù)組聲明代碼的生成是根據(jù)每一個所述0ΑΜ對象定義生成一個結構體實例,所 有的所述結構體實例組成結構體數(shù)組聲明;所述取對象數(shù)函數(shù)返回所述結構體數(shù)組中的對 象數(shù)目。在一個實施例中,實現(xiàn)該方法的代碼生成腳本通過讀取步驟2所定義的所述0ΑΜ 對象相關屬性值,并進行處理。對每一個所述0ΑΜ對象進行處理,所述處理包括:讀取到 " OB JECT_START "時,完成一些全局腳本變量的初始化。讀取到" SET_0B JECT "時,將讀取的其 后面的相關全局變量屬性值保留到相應的全局變量中。讀取到"SET_OBJECT_VARIABLE"時, 將讀取的其后面的相關參數(shù)變量屬性值保留到相應的全局變量中。讀取到"〇BJECT_END" 時,說明一個完整的對象定義已經(jīng)執(zhí)行完畢,生成代碼所需的全局變量賦值已經(jīng)完成。通過 這種方式或者類似的方式,同時可以將每一個所述0ΑΜ對象定義生成一個結構體實例。在 一個實施例中,代碼生成腳本根據(jù)所述0ΑΜ對象的對象名稱、所述對象Branch值、對象Leaf 值生成一個結構體實例;所述結構體實例包括相應對象的Branch、Leaf、設置函數(shù)、以及取 值函數(shù)。每個定義的所述0ΑΜ對象相關屬性值對應的生成了一個結構體實例,所有的這些 結構體實例構成了結構體數(shù)據(jù)。所述取對象數(shù)函數(shù)返回所述結構體數(shù)組中的結構體對象數(shù) 目,這可以簡單的統(tǒng)計生成了結構體實例數(shù)目實現(xiàn),也可以通過將所述結構體數(shù)組的長度 除以單個結構體長度得到。在一個實施例中,所述代碼生成腳本是通過TCL腳本實現(xiàn)的。
[0044] 在一個實施例中,所述0ΑΜ協(xié)議棧相關的代碼還包括:協(xié)議棧對象的設置函數(shù)代 碼。具體地,設置函數(shù)代碼的生成可以在讀取到"〇BJECT_END"時,生成代碼所需的全局變 量賦值已經(jīng)完成時執(zhí)行的。所述設置函數(shù)輸入的參數(shù)包括回復報文內存指針、回復報文內 存位移、設置報文有效數(shù)據(jù)字段指針、以及對象實例號;其中,所述對象實例號用于確定所 述0ΑΜ對象。在一個實施例中,針對每一個0ΑΜ對象都生成一個設置函數(shù)代碼,所有的設置 函數(shù)代碼生成后可以保存在對象私有設置函數(shù)接口源文件中。
[0045] 所述0ΑΜ對象的全局屬性還包括:設置消息ID、設置消息結構體、手動設置標記以 及目的進程ID。在生成協(xié)議棧對象的設置函數(shù)代碼時,代碼生成腳本首先判斷所述0ΑΜ對 象的手動設置標識是否為預設的手動設置標識(預設的手動設置標識可以默認為該屬性 關鍵字setspechandler)。如果所述0ΑΜ對象的手動設置標識為預設的手動設置標識,則說 明該0ΑΜ對象的設置函數(shù)需要人工處理,此時,生成的所述0ΑΜ對象的設置函數(shù)為空函數(shù)。 當所述0ΑΜ對象的手動設置標識不為預設的手動設置標識時,生成的所述設置函數(shù)代碼包 括:首先判斷所述設置消息ID是否有效,如果有效,則根據(jù)所述設置報文有效數(shù)據(jù)字段指 針獲取所述0ΑΜ對象的相應屬性值,并將所述0ΑΜ對象的相應屬性值填寫到所述0ΑΜ對象 的設置消息結構體中。當所述屬性值為多個時,將依次所述設置報文有效數(shù)據(jù)字段指針獲 取所述0ΑΜ對象的相應屬性值(即根據(jù)對象屬性順序及屬性對應的在報文中的長度循環(huán)解 析所述設置報文的有效數(shù)據(jù)字段獲取所述屬性值),并將所述0ΑΜ對象的相應屬性值填寫 到所述0ΑΜ對象的設置消息結構體中。根據(jù)所述0ΑΜ對象的設置消息ID、設置消息結構體 以及目的進程ID生成設置消息發(fā)送給目標進程;根據(jù)所述目標進程的設置回復消息確定 設置回復碼;將所述OAM對象的Branch值、Leaf值以及所述設置回復碼填寫到所述回復報 文內存指針確定的相應位置。如果所述設置消息ID無效,則不進行獲取屬性的操作,直接 將所述0ΑΜ對象的Branch值、Leaf值以及無效返回碼填寫到所述回復報文內存指針確定 的相應位置。所述設置函數(shù)還可以包括發(fā)送所述回復報文(通常為0ΑΜ報文)。當所述設 置消息ID無效時,回復帶無效返回碼的0ΑΜ報文;當所述設置消息ID有效時,正確回復0ΑΜ 報文。在一個實施例中,所述代碼生成腳本是通過TCL腳本實現(xiàn)的。
[0046] 在一個實施例中,所述0ΑΜ協(xié)議棧相關的代碼還包括:協(xié)議棧對象的取值函數(shù)代 碼。具體地,取值函數(shù)代碼的生成可以在讀取到"〇BJECT_END"時,生成代碼所需的全局變 量賦值已經(jīng)完成時執(zhí)行的。所述取值函數(shù)輸入的參數(shù)包括回復報文內存指針、回復報文內 存位移、取值報文有效數(shù)據(jù)字段指針、以及對象實例號。其中,所述對象實例號用于確定所 述0ΑΜ對象。在一個實施例中,針對每一個0ΑΜ對象都生成一個取值函數(shù)代碼,所有的取值 函數(shù)代碼生成后可以保存在對象私有取值函數(shù)接口源文件中。
[0047] 所述0ΑΜ對象的全局屬性還包括:取值消息ID、取值消息結構體、手動取值標記以 及目的進程ID。在生成協(xié)議棧對象的取值函數(shù)代碼時,代碼生成腳本首先判斷所述0ΑΜ對 象的手動取值標識是否為預設的手動取值標識(預設的手動取值標識可以默認為該屬性 關鍵字getspechandler)。如果所述0ΑΜ對象的手動取值標識為預設的手動取值標識,則 說明該0ΑΜ對象的取值函數(shù)需要人工處理,此時,生成的所述0ΑΜ對象的取值函數(shù)為空函 數(shù)。當所述0ΑΜ對象的手動取值標識為預設的手動取值標識時,生成的所述取值函數(shù)代碼 包括:判斷所述取值消息ID是否有效,如果有效,則根據(jù)所述0ΑΜ對象的取值消息ID、取值 消息結構體以及目的進程ID生成取值消息發(fā)送給目標進程;根據(jù)所述目標進程的取值回 復消息獲取所述0ΑΜ對象的相應屬性值,并將所述0ΑΜ對象Branch值、Leaf值以及所獲取 的所述0ΑΜ對象的相應屬性值填充到所述回復報文內存指針確定的相應位置。如果所述取 值消息ID無效,則不進行獲取屬性的操作,直接將所述0ΑΜ對象的Branch值、Leaf值以及 無效返回碼填寫到所述回復報文內存指針確定的相應位置。所述取值函數(shù)還可以包括發(fā)送 所述回復報文(通常為0ΑΜ報文)。當所述取值消息回復帶無效返回碼的0ΑΜ報文;當所 述取值消息ID有效時,正確回復帶參數(shù)內容的0ΑΜ報文。在一個實施例中,所述代碼生成 腳本是通過TCL腳本實現(xiàn)的。
[0048] 在一個實施例中,如圖2所示,所述0ΑΜ協(xié)議棧編碼方法包括生成設置函數(shù)代碼。 首先,在對象定義腳本中根據(jù)預設的對象定義模板定義協(xié)議中的0ΑΜ對象。然后,將對象定 義腳本導入到功能實現(xiàn)腳本(即代碼生成腳本)。在功能實現(xiàn)腳本中,首先根據(jù)所述0ΑΜ 對象的手動設置標識判斷是否需要手動處理,如果答案為YES,則需要手動處理設置函數(shù)代 碼。如果答案為No,此時,先通過設置消息ID判斷設置消息是否有效(通過判斷設置消息 ID是否有效判斷),如果答案為YES,則對設置消息報文進行解析,獲取所述0ΑΜ對象的相應 屬性值,并填寫到所述0ΑΜ對象的設置消息結構體中,根據(jù)所述0ΑΜ對象的設置消息ID、設 置消息結構體以及目的進程ID生成設置消息發(fā)送給目標進程,根據(jù)所述目標進程的設置 回復消息確定設置回復碼。根據(jù)設置回復碼填寫正確的0ΑΜ報文并回復。如果答案為No, 則回復無效0ΑΜ報文。
[0049] 在一個實施例中,如圖3所示,所述0ΑΜ協(xié)議棧編碼方法包括生成取值函數(shù)代碼。 首先,在對象定義腳本中根據(jù)預設的對象定義模板定義協(xié)議中的0ΑΜ對象。然后,將對象定 義腳本導入到功能實現(xiàn)腳本(即代碼生成腳本)。在功能實現(xiàn)腳本中,首先根據(jù)所述OAM 對象的手動取值標識判斷是否需要手動處理,如果答案為YES,則需要手動處理取值函數(shù)代 碼,即需要人工處理。如果答案為No,此時,先通過取值消息ID判斷設置消息是否有效(通 過判斷取值消息ID是否有效來確定),如果答案為YES,則根據(jù)所述0ΑΜ對象的取值消息 ID、取值消息結構體以及目的進程ID生成取值消息發(fā)送給目標進程。根據(jù)所述目標進程的 取值回復消息獲取所述0ΑΜ對象的相應屬性值,并將所述0ΑΜ對象Branch值、Leaf值以及 所獲取的所述0ΑΜ對象的相應屬性值填充到正確的0ΑΜ報文上,并回復所述正確的0ΑΜ報 文。如果答案為No,則回復無效0ΑΜ報文。
[0050] 本發(fā)明還提供一種0ΑΜ協(xié)議棧編碼系統(tǒng)。所述0ΑΜ協(xié)議棧編碼系統(tǒng)能夠應用如前 所述的0ΑΜ協(xié)議棧編碼方法。如圖4所示,在一個實施例中,所述0ΑΜ協(xié)議棧編碼系統(tǒng)1包 括:模板定義模塊11、對象定義模塊12、以及代碼生成模塊13。其中:
[0051] 模板定義模塊11,用于設置對象定義模塊。所述模板定義模塊中的所述對象定義 模板包括:對對象的全局屬性以及對象的參數(shù)的定義;所述對象的全局屬性包括:對象的 名稱、對象Branch值、以及對象Leaf值;所述對象的參數(shù)屬性包括:參數(shù)的名稱、參數(shù)的數(shù) 據(jù)類型、以及參數(shù)在內存中占用的長度。
[0052] 對象定義模塊12,與所述模板定義模塊11相連,用于根據(jù)所述對象定義模板對 0ΑΜ對象進行定義0ΑΜ對象相關屬性值。
[0053] 代碼生成模塊13,與所述對象定義模塊12相連,用于根據(jù)定義的所述0ΑΜ對象相 關屬性值生成0ΑΜ協(xié)議棧相關的代碼。在一個實施例中,所述代碼生成模塊13中的所述 0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧公用函數(shù)源碼;所述協(xié)議棧公用函數(shù)源碼包括協(xié)議棧 對象的結構體;所述結構體代碼的生成是根據(jù)每一個所述0ΑΜ對象定義生成一個結構體實 例。在一個實施例中,所述結構體實例包括相應對象的Branch、Leaf、設置函數(shù)、以及取值 函數(shù)。
[0054] 在一個實施例中,所述代碼生成模塊13中的所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié) 議棧公用函數(shù)源碼;所述協(xié)議棧公用函數(shù)源碼包括協(xié)議棧對象的結構體數(shù)組聲明、以及取 對象函數(shù);所述結構體數(shù)組聲明代碼的生成是根據(jù)每一個所述0ΑΜ對象定義生成一個結構 體實例,所有的所述結構體實例組成結構體數(shù)組聲明;所述取對象函數(shù)返回所述結構體數(shù) 組中的對象數(shù)目。在一個實施例中,所述結構體實例包括相應對象的Branch、Leaf、設置函 數(shù)、以及取值函數(shù)。
[0055] 在一個實施例中,所述代碼生成模塊13中的所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié) 議棧對象的設置函數(shù)代碼;所述設置函數(shù)輸入的參數(shù)包括回復報文內存指針、設置報文有 效數(shù)據(jù)字段指針、以及對象實例號;所述對象實例號用于確定所述0ΑΜ對象;所述0ΑΜ對象 的全局屬性還包括:設置消息ID、設置消息結構體、手動設置標記以及目的進程ID。當所 述0ΑΜ對象的手動設置標識為預設的手動設置標識,則說明該0ΑΜ對象的設置函數(shù)需要人 工處理,此時,生成的所述0ΑΜ對象的取值函數(shù)為空函數(shù)。當所述0ΑΜ對象的手動設置標識 不為預設的手動設置標識時,生成的所述設置函數(shù)代碼包括:判斷所述設置消息ID是否有 效,如果有效,則根據(jù)所述設置報文有效數(shù)據(jù)字段指針獲取所述0ΑΜ對象的相應屬性值,并 將所述0ΑΜ對象的相應屬性值填寫到所述0ΑΜ對象的設置消息結構體中;根據(jù)所述0ΑΜ對 象的設置消息ID、設置消息結構體以及目的進程ID生成設置消息發(fā)送給目標進程;根據(jù)所 述目標進程的設置回復消息確定設置回復碼;將所述OAM對象的Branch值、Leaf值以及所 述設置回復碼填寫到所述回復報文內存指針確定的相應位置。所述設置函數(shù)還可以包括發(fā) 送所述回復報文(通常為0ΑΜ報文)。當所述設置消息ID無效時,回復帶無效返回碼的0ΑΜ 報文;當所述設置消息ID有效時,正確回復0ΑΜ報文。
[0056] 在一個實施例中,所述代碼生成模塊13中的所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié) 議棧對象的取值函數(shù)代碼;所述取值函數(shù)輸入的參數(shù)包括回復報文內存指針、取值報文有 效數(shù)據(jù)字段指針、以及對象實例號。所述對象實例號用于確定所述0ΑΜ對象;所述0ΑΜ對象 的全局屬性還包括:取值消息ID、取值消息結構體、手動取值標記以及目的進程ID。當所 述0ΑΜ對象的手動取值標識為預設的手動取值標識,則說明該0ΑΜ對象的取值函數(shù)需要人 工處理,此時,生成的所述0ΑΜ對象的取值函數(shù)為空函數(shù)。當所述0ΑΜ對象的手動取值標識 不為預設的手動取值標識時,生成的所述取值函數(shù)代碼包括:判斷所述取值消息ID是否有 效,如果有效,則根據(jù)所述0ΑΜ對象的取值消息ID、取值消息結構體以及目的進程ID生成取 值消息發(fā)送給目標進程;根據(jù)所述目標進程的取值回復消息獲取所述0ΑΜ對象的相應屬性 值,并將所述0ΑΜ對象Branch值、Leaf值以及所獲取的所述0ΑΜ對象的相應屬性值填充到 所述回復報文內存指針確定的相應位置。所述取值函數(shù)還可以包括發(fā)送所述回復報文(通 常為0ΑΜ報文)。當所述取值消息回復帶無效返回碼的0ΑΜ報文;當所述取值消息ID有效 時,正確回復帶參數(shù)內容的0ΑΜ報文。
[0057] 綜上所述,本發(fā)明一種0ΑΜ協(xié)議棧編碼方法及系統(tǒng),具有以下有益效果:能夠自動 實現(xiàn)部分0ΑΜ協(xié)議棧相關代碼的自動生成,不僅大大提供了代碼的書寫效率,縮短了項目 開發(fā)周期,而且自動生成的代碼的準確性、清晰性也得到了增強,為后期的二次開發(fā)及維護 提供了極大的便利。所以,本發(fā)明有效克服了現(xiàn)有技術中的種種缺點而具高度產業(yè)利用價 值。
[0058] 上述實施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟 悉此技術的人士皆可在不違背本發(fā)明的精神及范疇下,對上述實施例進行修飾或改變。因 此,舉凡所屬【技術領域】中具有通常知識者在未脫離本發(fā)明所揭示的精神與技術思想下所完 成的一切等效修飾或改變,仍應由本發(fā)明的權利要求所涵蓋。
【權利要求】
1. 一種OAM協(xié)議棧編碼方法,其特征在于,所述OAM協(xié)議棧編碼方法包括: 設置對象定義模塊; 根據(jù)所述對象定義模板對0ΑΜ對象進行定義0ΑΜ對象相關屬性值; 根據(jù)定義的所述0ΑΜ對象相關屬性值生成0ΑΜ協(xié)議棧相關的代碼。
2. 根據(jù)權利要求1所述的0ΑΜ協(xié)議棧編碼方法,其特征在于:所述對象定義模板包括: 對對象的全局屬性以及對象的參數(shù)的定義;所述對象的全局屬性包括:對象的名稱、對象 Branch值、以及對象Leaf值;所述對象的參數(shù)屬性包括:參數(shù)的名稱、參數(shù)的數(shù)據(jù)類型、以 及參數(shù)在內存中占用的長度。
3. 根據(jù)權利要求2所述的0ΑΜ協(xié)議棧編碼方法,其特征在于:所述0ΑΜ協(xié)議棧相關的 代碼包括:協(xié)議棧公用函數(shù)源碼;所述協(xié)議棧公用函數(shù)源碼包括協(xié)議棧對象的結構體;所 述結構體代碼的生成是根據(jù)每一個所述0ΑΜ對象定義生成一個結構體實例。
4. 根據(jù)權利要求2所述的0ΑΜ協(xié)議棧編碼方法,其特征在于:所述0ΑΜ協(xié)議棧相關的 代碼包括:協(xié)議棧公用函數(shù)源碼;所述協(xié)議棧公用函數(shù)源碼包括協(xié)議棧對象的結構體數(shù)組 聲明、以及取對象數(shù)函數(shù);所述結構體數(shù)組聲明代碼的生成是根據(jù)每一個所述0ΑΜ對象定 義生成一個結構體實例,所有的所述結構體實例組成結構體數(shù)組聲明;所述取對象數(shù)函數(shù) 返回所述結構體數(shù)組中的對象數(shù)目。
5. 根據(jù)權利要求3或4所述的0ΑΜ協(xié)議棧編碼方法,其特征在于:所述根據(jù)每一個所 述0ΑΜ對象定義生成一個結構體的具體實現(xiàn)包括:根據(jù)所述對象的名稱、所述對象Branch 值、對象Leaf值生成一個結構體實例;所述結構體實例包括相應對象的Branch、Leaf、設置 函數(shù)、以及取值函數(shù)。
6. 根據(jù)權利要求5所述的0ΑΜ協(xié)議棧編碼方法,其特征在于:所述0ΑΜ協(xié)議棧相關的代 碼包括:協(xié)議棧對象的設置函數(shù)代碼;所述設置函數(shù)輸入的參數(shù)包括回復報文內存指針、 設置報文有效數(shù)據(jù)字段指針、以及對象實例號;所述對象實例號用于確定所述0ΑΜ對象;所 述0ΑΜ對象的全局屬性還包括:設置消息ID、設置消息結構體、手動設置標記以及目的進程 ID ;當所述0ΑΜ對象的手動設置標識不為預設的手動設置標識時,生成的所述設置函數(shù)代 碼包括:根據(jù)所述設置報文有效數(shù)據(jù)字段指針獲取所述0ΑΜ對象的相應屬性值,并將所述 0ΑΜ對象的相應屬性值填寫到所述0ΑΜ對象的設置消息結構體中;根據(jù)所述0ΑΜ對象的設 置消息ID、設置消息結構體以及目的進程ID生成設置消息發(fā)送給目標進程;根據(jù)所述目標 進程的設置回復消息確定設置回復碼;將所述0ΑΜ對象的Branch值、Leaf值以及所述設置 回復碼填寫到所述回復報文內存指針確定的相應位置;當所述0ΑΜ對象的對象手動設置標 識為預設的手動設置標識時,則生成的所述設置函數(shù)為空函數(shù),此時所述設置函數(shù)需人工 處理。
7. 根據(jù)權利要求5所述的0ΑΜ協(xié)議棧編碼方法,其特征在于:所述0ΑΜ協(xié)議棧相關的代 碼包括:協(xié)議棧對象的取值函數(shù)代碼;所述取值函數(shù)輸入的參數(shù)包括回復報文內存指針、 取值報文有效數(shù)據(jù)字段指針、以及對象實例號;所述對象實例號用于確定所述0ΑΜ對象;所 述0ΑΜ對象的全局屬性還包括:取值消息ID、取值消息結構體、手動取值標記以及目的進程 ID ;當所述0ΑΜ對象的手動取值標識為預設的手動取值標識時,生成的所述取值函數(shù)代碼 包括:根據(jù)所述0ΑΜ對象的取值消息ID、取值消息結構體以及目的進程ID生成取值消息發(fā) 送給目標進程;根據(jù)所述目標進程的取值回復消息獲取所述0ΑΜ對象的相應屬性值,并將 所述OAM對象Branch值、Leaf值以及所獲取的所述OAM對象的相應屬性值填充到所述回 復報文內存指針確定的相應位置;所當所述0ΑΜ對象的對象手動取值標識為預設的手動取 值標識時,則生成的所述取值函數(shù)為空函數(shù),此時所述設置函數(shù)需人工處理。
8. -種0ΑΜ協(xié)議棧編碼系統(tǒng),其特征在于:所述0ΑΜ協(xié)議棧編碼系統(tǒng)包括: 模板定義模塊,用于設置對象定義模塊; 對象定義模塊,與所述模板定義模塊相連,用于根據(jù)所述對象定義模板對0ΑΜ對象進 行定義0ΑΜ對象相關屬性值; 代碼生成模塊,與所述對象定義模塊相連,用于根據(jù)定義的所述0ΑΜ對象相關屬性值 生成0ΑΜ協(xié)議棧相關的代碼。
9. 根據(jù)權利要求8所述的0ΑΜ協(xié)議棧編碼系統(tǒng),其特征在于:所述模板定義模塊中的 所述對象定義模板包括:對對象的全局屬性以及對象的參數(shù)的定義;所述對象的全局屬性 包括:對象的名稱、對象Branch值、以及對象Leaf值;所述對象的參數(shù)屬性包括:參數(shù)的名 稱、參數(shù)的數(shù)據(jù)類型、以及參數(shù)在內存中占用的長度。
10. 根據(jù)權利要求9所述的0ΑΜ協(xié)議棧編碼系統(tǒng),其特征在于:所述0ΑΜ協(xié)議棧相關的 代碼包括:協(xié)議棧公用函數(shù)源碼;所述協(xié)議棧公用函數(shù)源碼包括協(xié)議棧對象的結構體;所 述結構體代碼的生成是根據(jù)每一個所述0ΑΜ對象定義生成一個結構體實例。
11. 根據(jù)權利要求9所述的0ΑΜ協(xié)議棧編碼系統(tǒng),其特征在于:所述代碼生成模塊中 的所述0ΑΜ協(xié)議棧相關的代碼包括:協(xié)議棧公用函數(shù)源碼;所述協(xié)議棧公用函數(shù)源碼包括 協(xié)議棧對象的結構體數(shù)組聲明、以及取對象函數(shù);所述結構體數(shù)組聲明代碼的生成是根據(jù) 每一個所述0ΑΜ對象定義生成一個結構體實例,所有的所述結構體實例組成結構體數(shù)組聲 明;所述取對象函數(shù)返回所述結構體數(shù)組中的對象數(shù)目。
12. 根據(jù)權利要求10或11所述的0ΑΜ協(xié)議棧編碼系統(tǒng),其特征在于:所述結構體實例 包括相應對象的Branch、Leaf、設置函數(shù)、以及取值函數(shù);所述代碼生成模塊中的所述0ΑΜ 協(xié)議棧相關的代碼包括:協(xié)議棧對象的設置函數(shù)代碼;所述設置函數(shù)輸入的參數(shù)包括回復 報文內存指針、設置報文有效數(shù)據(jù)字段指針、以及對象實例號;所述對象實例號用于確定所 述0ΑΜ對象;所述0ΑΜ對象的全局屬性還包括:設置消息ID、設置消息結構體、手動設置標 記以及目的進程ID ;當所述0ΑΜ對象的手動設置標識不為預設的手動設置標識時,生成的 所述設置函數(shù)代碼包括:根據(jù)所述設置報文有效數(shù)據(jù)字段指針獲取所述0ΑΜ對象的相應屬 性值,并將所述0ΑΜ對象的相應屬性值填寫到所述0ΑΜ對象的設置消息結構體中;根據(jù)所述 0ΑΜ對象的設置消息ID、設置消息結構體以及目的進程ID生成設置消息發(fā)送給目標進程; 根據(jù)所述目標進程的設置回復消息確定設置回復碼;將所述0ΑΜ對象的Branch值、Leaf值 以及所述設置回復碼填寫到所述回復報文內存指針確定的相應位置;所述代碼生成模塊中 的所述0ΑΜ協(xié)議棧相關的代碼還包括:協(xié)議棧對象的取值函數(shù)代碼;所述取值函數(shù)輸入的 參數(shù)包括回復報文內存指針、取值報文有效數(shù)據(jù)字段指針、以及對象實例號;所述對象實例 號用于確定所述0ΑΜ對象;所述0ΑΜ對象的全局屬性還包括:取值消息ID、取值消息結構 體、手動取值標記以及目的進程ID ;當所述0ΑΜ對象的手動取值標識為預設的手動取值標 識時,生成的所述取值函數(shù)代碼包括:根據(jù)所述0ΑΜ對象的取值消息ID、取值消息結構體以 及目的進程ID生成取值消息發(fā)送給目標進程;根據(jù)所述目標進程的取值回復消息獲取所 述0ΑΜ對象的相應屬性值,并將所述0ΑΜ對象Branch值、Leaf值以及所獲取的所述0ΑΜ對 象的相應屬性值填充到所述回復報文內存指針確定的相應位置。
【文檔編號】H04L29/08GK104158903SQ201410427666
【公開日】2014年11月19日 申請日期:2014年8月27日 優(yōu)先權日:2014年8月27日
【發(fā)明者】黃志成 申請人:上海斐訊數(shù)據(jù)通信技術有限公司