《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信与网络 > 业界动态 > 基于多线程的NGN综合接入网关测试系统的设计与实现

基于多线程的NGN综合接入网关测试系统的设计与实现

2008-03-17
作者:廖 薇, 刘锦高

?

  摘 要: 針對(duì)目前接入網(wǎng)關(guān)測(cè)試系統(tǒng)" title="測(cè)試系統(tǒng)">測(cè)試系統(tǒng)的測(cè)試速度較慢的現(xiàn)狀,運(yùn)用多線程技術(shù),設(shè)計(jì)了一種新的接入網(wǎng)關(guān)測(cè)試系統(tǒng),主要介紹了本測(cè)試系統(tǒng)的整體設(shè)計(jì),著重講述了其多線程測(cè)試的實(shí)現(xiàn),通過測(cè)試比較,證明了這種多線程接入網(wǎng)關(guān)測(cè)試系統(tǒng)在速度及性能上有很大的優(yōu)勢(shì)。
  關(guān)鍵詞: 多線程 NGN? 接入網(wǎng)? 網(wǎng)關(guān)? 線路測(cè)試

?

  隨著電信事業(yè)跨越式的發(fā)展和通信技術(shù)的不斷進(jìn)步,各地電信局在原有交換機(jī)容量及出局線對(duì)都不能滿足用戶裝機(jī)需求的情況下,如何提高和完善電信服務(wù)質(zhì)量已經(jīng)成為電信業(yè)面臨的一個(gè)重要問題。傳統(tǒng)的112集中受理系統(tǒng)只受理交換機(jī)直接接出的用戶業(yè)務(wù)。隨著電信技術(shù)的不斷發(fā)展和接入網(wǎng)技術(shù)的日趨成熟,網(wǎng)絡(luò)接入設(shè)備解決了城鄉(xiāng)電信用戶對(duì)通信的需求,接入網(wǎng)逐漸成為電信網(wǎng)上用戶接入的主流[1]
  傳統(tǒng)程控電話網(wǎng)采用的是外接測(cè)試頭" title="測(cè)試頭">測(cè)試頭。如果進(jìn)行話機(jī)測(cè)試,由于此時(shí)用戶線與測(cè)試頭建立的是金屬線連接,對(duì)用戶的振鈴?fù)ㄔ捦耆蓽y(cè)試頭內(nèi)的振鈴電路和通話電路完成,用戶饋電、鈴流都由測(cè)試頭控制,語(yǔ)音處理也在測(cè)試頭中完成,局端的話機(jī)接在測(cè)試頭上,與交換機(jī)或接入設(shè)備本身無關(guān)。而使用內(nèi)置測(cè)試功能時(shí),與用戶的交互只能通過打電話的方式建立,并利用接入設(shè)備本身的通用振鈴和語(yǔ)音電路。因此進(jìn)行話機(jī)測(cè)試時(shí),需先打通電話,才能進(jìn)行振鈴和話機(jī)測(cè)試。故采用內(nèi)置測(cè)試方案,交互測(cè)試不能沿用測(cè)試頭測(cè)試的流程。本文設(shè)計(jì)的正是這樣一種內(nèi)線測(cè)試方案。
  本系統(tǒng)可以多線程地進(jìn)行測(cè)試。對(duì)于不同網(wǎng)元的測(cè)試,允許并行進(jìn)行,不需要等待結(jié)果返回后再開始新的測(cè)試;允許接收多條測(cè)試指令,對(duì)不同NE的測(cè)試也可以并行進(jìn)行,在測(cè)試過程中可以接收和執(zhí)行新的測(cè)試命令。


1 系統(tǒng)概況
  本測(cè)試系統(tǒng)如圖1所示,大容量綜合接入" title="綜合接入">綜合接入網(wǎng)關(guān)(AG)可以連接到網(wǎng)管中心的網(wǎng)管系統(tǒng)上,該系統(tǒng)同時(shí)具備網(wǎng)元管理功能和業(yè)務(wù)管理功能。模塊Agent 112可以對(duì)其所管轄的綜合接入網(wǎng)關(guān)進(jìn)行窄帶線路測(cè)試" title="線路測(cè)試">線路測(cè)試,Agent 112與112中心之間通過協(xié)議轉(zhuǎn)換器112MD 實(shí)現(xiàn)對(duì)接。
  與外接測(cè)試頭不同的是,112中心可通過IP網(wǎng)發(fā)命令到112MD的 Socket接口來實(shí)現(xiàn)線路測(cè)試功能,而傳統(tǒng)的程控電話網(wǎng)的外置測(cè)試系統(tǒng)中,還需單獨(dú)組建測(cè)試頭的網(wǎng)管通道。
1.1 主要測(cè)試功能
  綜合接入網(wǎng)關(guān)實(shí)現(xiàn)的本測(cè)試系統(tǒng)符合電總112集中測(cè)試協(xié)議和接口規(guī)范[2]
  用戶線路測(cè)試主要包括內(nèi)線測(cè)試(電路測(cè)試)、外線測(cè)試(線路測(cè)試)以及配合測(cè)試(終端測(cè)試)三部分,各地具體的要求也是在此基礎(chǔ)進(jìn)行添加的。
  (1)電路測(cè)試:包括撥號(hào)音測(cè)試、饋電電壓測(cè)試、回路電流測(cè)試等。
  (2)線路測(cè)試:包括群測(cè)(12項(xiàng)外線測(cè)試)、測(cè)用戶線路交流電壓值(AB、AG、BG)、測(cè)用戶線路直流電壓值(AB、AG、BG)、測(cè)用戶環(huán)路直流電流值(AB)、測(cè)用戶環(huán)路電阻值(AB)、測(cè)用戶線路絕緣電阻值(AB、AG、BG)、測(cè)用戶線路電容值(AB、AG、BG)以及測(cè)用戶線路阻抗(AB、AG、BG)等。
  (3)終端測(cè)試:包括對(duì)被測(cè)用戶振鈴、測(cè)試用戶話機(jī)雙音頻特性或脈沖特性、對(duì)用戶話機(jī)送嗥鳴音等。
1.2 工作過程
  112中心在TS處設(shè)置數(shù)據(jù),使所有綜合接入網(wǎng)關(guān)的用戶都通過112MD(相當(dāng)于一個(gè)新增的CS)來測(cè)試。112測(cè)試由人工坐席或AVR(自動(dòng)應(yīng)答器)發(fā)起,TS收到測(cè)試請(qǐng)求后,如果是綜合接入網(wǎng)關(guān)的用戶,則會(huì)向112MD發(fā)出測(cè)試請(qǐng)求,112MD收到測(cè)試請(qǐng)求后,通過Agent 112的測(cè)試接口向相應(yīng)的綜合接入網(wǎng)關(guān)發(fā)送測(cè)試命令,網(wǎng)關(guān)測(cè)試完畢后將測(cè)試結(jié)果" title="測(cè)試結(jié)果">測(cè)試結(jié)果反饋給Agent 112,再由112MD進(jìn)行協(xié)議轉(zhuǎn)換后發(fā)送給TS,至此完成一次測(cè)試過程。
2 系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)
2.1 總體設(shè)計(jì)
  本系統(tǒng)主要包括112MD、Agent、綜合接入網(wǎng)關(guān)和用戶終端等模塊[3]
  112MD是一個(gè)協(xié)議轉(zhuǎn)換器,測(cè)試中心發(fā)送112標(biāo)準(zhǔn)請(qǐng)求時(shí),112MD負(fù)責(zé)接收并將協(xié)議轉(zhuǎn)換成1355標(biāo)準(zhǔn),再發(fā)送給Agent 112;Agent 112主要負(fù)責(zé)轉(zhuǎn)化基于1355SAP的線路測(cè)試需求和結(jié)果并調(diào)用RAMI ,即進(jìn)行命令分析,根據(jù)對(duì)應(yīng)的測(cè)試命令對(duì)綜合接入網(wǎng)關(guān)進(jìn)行相應(yīng)的測(cè)試;綜合接入網(wǎng)關(guān)可以使一個(gè)單一節(jié)點(diǎn)向一個(gè)地區(qū)提供多種接入業(yè)務(wù)。
  網(wǎng)管系統(tǒng)與本測(cè)試系統(tǒng)的接口通信協(xié)議采用TCP/IP協(xié)議。低層協(xié)議推薦使用x.25和ATM,也可以根據(jù)實(shí)際情況選用其他支持IP的低層協(xié)議[4]。
2.2 多線程的實(shí)現(xiàn)
  多線程測(cè)試是在Agent 112模塊中實(shí)現(xiàn)的。該模塊的程序代碼以WIN2000為平臺(tái),用VC++6.0編寫[5]。Agent 112模塊包含1355SAP Entity、Agent 112 Proxy、Log Record Module(日志記錄模塊)、Core Process Module(內(nèi)核進(jìn)程模塊)和DN Translator Service(DN轉(zhuǎn)換服務(wù))五個(gè)部分,如圖2所示。


  1355SAP Entity實(shí)現(xiàn)了Agent Socket接入點(diǎn)接口。當(dāng)Agent 運(yùn)行時(shí),它與調(diào)解設(shè)備進(jìn)行通信,從解調(diào)設(shè)備獲取LT需求并返回結(jié)果。在這個(gè)模塊中還有一個(gè)緩沖區(qū)用來保存MD中的數(shù)據(jù)。當(dāng)其收到線路測(cè)試需求時(shí),首先驗(yàn)證此需求的有效性。如果有效,它便在核心程序模塊中調(diào)用接口函數(shù)以啟動(dòng)測(cè)試程序。
  內(nèi)核進(jìn)程模塊是此應(yīng)用軟件的主要模塊,它控制了整個(gè)測(cè)試程序,同時(shí)負(fù)責(zé)創(chuàng)建1355SAP Entity、日志記錄模塊,以及啟動(dòng)proxy的object,通過測(cè)試數(shù)據(jù)執(zhí)行測(cè)試。
  日志文檔 是Agent 112和Topological View的共同點(diǎn)。Agent 112通過在日志文檔中記錄的所有關(guān)于被請(qǐng)求的測(cè)試(包括錯(cuò)誤)信息來追蹤測(cè)試。同時(shí),通過Main View,操作者可以查看這些日志文檔。當(dāng)Agent 112啟動(dòng)時(shí),它便會(huì)核對(duì)日志文檔。如果日志文檔不存在,便建立log file。如果已經(jīng)存在,便打開以記錄。記錄的最大數(shù)量為1 000。如果超過該范圍,便寫在第一條記錄上。
  Agent 112 Proxy是一個(gè)獨(dú)立程序,而且它也是一個(gè)短周期的進(jìn)程。這就意味著當(dāng)Agent收到有效的LT需求時(shí)它開始運(yùn)行,返回結(jié)果時(shí),它便關(guān)閉。
  在Agent 112 Proxy與NE之間,使用了一個(gè)私有接口RAMI。RAMI是一系列的PRC調(diào)用。
2.2.1 類CAgent 112 Main
  這個(gè)類與核心程序模塊的軟件架構(gòu)是一致的。
  client thread 啟動(dòng),此class? instance便被創(chuàng)建。它管理著整個(gè)線路控制程序。socket connection關(guān)閉,它便會(huì)被一起刪掉。
2.2.2? Agent 112 Proxy
  Agent 112 Proxy負(fù)責(zé)與NE通信。它通過C而不是C++實(shí)現(xiàn)。它的功能是進(jìn)行線路測(cè)試。消息程序流程圖如圖3所示。


  線路測(cè)試開始,Agent 112便啟動(dòng)Agent 112 Proxy并通過Windows Message發(fā)送測(cè)試命令,然后,Windows Message通過CCPE與NE通信,發(fā)送測(cè)試命令給NE,幾秒鐘后,NE通知Windows Message測(cè)試完成,Agent 112 Proxy收到,并從NE得到結(jié)果,把結(jié)果通過Windows Message送到Agent 112,最后Agent 112 Proxy自己結(jié)束。
2.2.3 類CTestReport
  對(duì)于每個(gè)NE的測(cè)試,都可以啟動(dòng)一個(gè)獨(dú)立的線程TestThread進(jìn)行測(cè)試,并等待接收測(cè)試報(bào)告。
  線程中主要包含了一個(gè)CTestReport類型的對(duì)象。CTestReport類是CAgent112Main類的子類。由于測(cè)試和等待結(jié)果的功能改在子線程中實(shí)現(xiàn),所以,原有的類結(jié)構(gòu)模型也不再適用。但是由于功能間的數(shù)據(jù)耦合緊密,所以采用了繼承的方式分割。CTestReport類的成員保存了測(cè)試命令的有關(guān)指數(shù)和測(cè)試結(jié)果的相關(guān)信息。CTestReport類還提供了兩個(gè)成員函數(shù)PerformTest()和ResultReport(),分別實(shí)現(xiàn)進(jìn)行測(cè)試和返回測(cè)試結(jié)果的功能。使用數(shù)組pLTObject[m_Index]存儲(chǔ)指向該類的對(duì)象指針,方便在結(jié)果返回時(shí)能夠找到對(duì)應(yīng)的對(duì)象。而pLTObject的索引號(hào)與NE名在InTestNE[NENum]中的索引號(hào)一致,由m_Index表示。
  pLTObject [m_Index]= pTestReport;
  在得到返回的測(cè)試結(jié)果時(shí),逐一進(jìn)行比較,找到對(duì)應(yīng)的對(duì)象:
  for(i=0;i  ??{
  if(((Agent112_MESSAGE_LT_RESULT *)(pResultData->lpData))->agent112Obj_ptr
           ==(DWORD) pLTObject[i])
  ??{
  ?? pLTObject[i]->
    ResultArrived((Agent112_MESSAGE_LT_RESULT *)(pResultData->lpData));
  ??        break;
  ??}
  ???? }
  在進(jìn)行測(cè)試時(shí),因等待測(cè)試結(jié)果需要一定的時(shí)間,在這個(gè)過程中線程將會(huì)掛起,直到結(jié)果到來才被解掛。
  由于測(cè)試由單線程變?yōu)槎嗑€程,需要處理一些同步機(jī)制。在將一些測(cè)試參數(shù)傳遞至子線程時(shí),要保證在傳遞之前這些信息不能被改動(dòng),可以利用信號(hào)量來進(jìn)行同步。再一次使用對(duì)象時(shí)首先需要進(jìn)行判斷,然后賦值,最后釋放資源[6]。
  if(WaitForSingleObject(hBuffWaiting,60000)
????????????           //for synchronization
  ???????? == WAIT_TIMEOUT)
  SetEvent(hBuffWaiting);
  另外,有些命令由多個(gè)子命令組成。在第一個(gè)子命令還未完成時(shí),第二個(gè)子命令應(yīng)處于等待狀態(tài),故而使用dwWaitResult=WaitForSingleObject(pLTObject[i]->GetHandle(),500); 來實(shí)現(xiàn)。
  通過NE名找到對(duì)應(yīng)的測(cè)試線程,所以,首先需要找到NE名,在這種情況下,創(chuàng)建函數(shù)GetNEName()來獲得NE名。
  在CAgent112Main類中增加HANDLE m_hTestThread用來記錄線程的句柄,以便在測(cè)試結(jié)果返回時(shí)能夠找到對(duì)應(yīng)的線程。
  增加一個(gè)數(shù)組InTestNE[i]記錄正在進(jìn)行測(cè)試的NE名。該數(shù)組在生成線程之前用來檢測(cè)NE是否符合要求。如果要測(cè)試的NE名已經(jīng)存在,說明該NE已經(jīng)在進(jìn)行測(cè)試,暫時(shí)不能接受新的測(cè)試命令,這條命令將會(huì)被駁回,返回一個(gè)rcode=53的錯(cuò)誤;反之,認(rèn)為該NE符合要求,將會(huì)為其啟動(dòng)測(cè)試線程,進(jìn)行測(cè)試,并且在InTestNE[i]找到空位置,存儲(chǔ)該NE名。
  針對(duì)這種情況,新增加一種錯(cuò)誤信息,即53號(hào)錯(cuò)誤信息。
  Agent 112_MESSAGE_ERROR*NEBusy=new Agent 112_MESSAGE_ERROR;
  NEBusy->rcode = 53;
    pAgent112 Main->ReturnError(TOE_NE,NEBusy);
  在C1355SAP->ReturnEorror()中,加入處理過程,并進(jìn)行錯(cuò)誤處理。
  if(pError->rcode==53)????????????????
    sprintf(szTemp,"TOE,NE,%d,\"NE in Testing\"",pError->rcode);
  在啟動(dòng)測(cè)試線程后,需要將由AnalyzeCMD()得到的信息從主線程傳遞至子線程,所以對(duì)于C1355SAP類型的數(shù)據(jù)采用賦值重用的方式封裝。這樣
  C1355SAP & C1355SAP::operator=(const C1355SAP& c1355sap)
  CAgent112Main的析構(gòu)函數(shù)~CAgent112Main()的實(shí)現(xiàn)發(fā)生改變。在單線程測(cè)試時(shí),CAgent112Main類對(duì)象pAgent112Main生命周期結(jié)束時(shí),一輪測(cè)試結(jié)束,socket可以關(guān)閉,所以可以將closesocket放在析構(gòu)函數(shù)~CAgent112Main()中實(shí)現(xiàn)。但是在多線程測(cè)試時(shí),某一個(gè)NE測(cè)試結(jié)束并不能代表連接的結(jié)束,socket也不能關(guān)閉,所以,closesocket改在停止測(cè)試時(shí)實(shí)現(xiàn)。
  在接收命令部分,允許多條指令的同時(shí)輸入。引入一個(gè)數(shù)組m_CommandBuff記錄輸入的多條命令,ComIndex指示正在進(jìn)行測(cè)試的命令的索引,ComNum表示一次讀入的命令數(shù)。這個(gè)命令數(shù)不一定就是一次發(fā)送的命令的條數(shù),它還與接收指令的Buff大小有關(guān)。它只能表示Agent 112一次從112MD收到的命令的條數(shù)。
  在測(cè)試部分,將啟用新的線程,并發(fā)的執(zhí)行測(cè)試功能不影響新的命令的接收。
3 測(cè)試比較
  在傳統(tǒng)的單線程測(cè)試過程中,每次只能發(fā)給Agent 112一個(gè)測(cè)試指令,并且只有在Agent 112發(fā)回測(cè)試結(jié)果后才能發(fā)送下一條命令。在等待測(cè)試結(jié)果的過程中,計(jì)算機(jī)處于閑置狀態(tài),不能對(duì)其他的NE進(jìn)行測(cè)試。而在本系統(tǒng)中,允許同時(shí)接收多條測(cè)試指令,并且對(duì)不同NE的測(cè)試可以并發(fā)進(jìn)行,在進(jìn)行測(cè)試的過程中,可以接收和執(zhí)行新的測(cè)試命令。但是對(duì)同一個(gè)NE,一次只允許一條命令進(jìn)行測(cè)試。經(jīng)過測(cè)試比較兩種情況分別如圖4所示。


  在發(fā)送命令時(shí),打開一個(gè)超級(jí)終端,連接到本機(jī)127.0.0.1:9009端口。寫好一個(gè)文本,例如命名為112command.txt,然后寫入命令:
INVOKEID=900 FEEDVOL TYPE=1:AGNENAME="ne0" AGNEIP=10.8.127.217 RACKNO=1 FRMNO=1 SLOTNO=8 PORTNO=4;
最后在超級(jí)終端-傳送-發(fā)送文本文件,選取此文件發(fā)送過去。測(cè)試結(jié)果會(huì)顯示在112MD和超級(jí)終端界面中。
  本文設(shè)計(jì)了一種基于多線程的NGN綜合接入網(wǎng)關(guān)測(cè)試系統(tǒng),其在測(cè)試速度和性能方面較之單線程測(cè)試系統(tǒng)有很大的提高,是目前發(fā)展的熱點(diǎn)。
參考文獻(xiàn)
[1]孔小斌,章萍.接入網(wǎng)112線路測(cè)試技術(shù)與實(shí)現(xiàn)[J].電信科學(xué),2000,(6):36-38.
[2]接入網(wǎng)112電總規(guī)范. 中國(guó)電信,1999,(6).
[3]趙慧玲,葉華.以軟交換為核心的下一代網(wǎng)絡(luò)技術(shù)[M].北京:人民郵電出版社,2002:30-56.
[4]W. RICHARD STEVENS. TCP/IP Illustrated Volume1:The ?Protocols[M].北京:機(jī)械工業(yè)出版社,2005:20-100.
[5]黃維通. Visual C++面向?qū)ο笈c可視化程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2000:10-250.
[6]Jeffrey Richter.Windows 高級(jí)編程指南[M].北京:清華大學(xué)出版社,2001:47-59.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。