摘 要: 針對目前接入網關測試系統" title="測試系統">測試系統的測試速度較慢的現狀,運用多線程技術,設計了一種新的接入網關測試系統,主要介紹了本測試系統的整體設計,著重講述了其多線程測試的實現,通過測試比較,證明了這種多線程接入網關測試系統在速度及性能上有很大的優勢。
關鍵詞: 多線程 NGN? 接入網? 網關? 線路測試
?
隨著電信事業跨越式的發展和通信技術的不斷進步,各地電信局在原有交換機容量及出局線對都不能滿足用戶裝機需求的情況下,如何提高和完善電信服務質量已經成為電信業面臨的一個重要問題。傳統的112集中受理系統只受理交換機直接接出的用戶業務。隨著電信技術的不斷發展和接入網技術的日趨成熟,網絡接入設備解決了城鄉電信用戶對通信的需求,接入網逐漸成為電信網上用戶接入的主流[1]。
傳統程控電話網采用的是外接測試頭" title="測試頭">測試頭。如果進行話機測試,由于此時用戶線與測試頭建立的是金屬線連接,對用戶的振鈴通話完全由測試頭內的振鈴電路和通話電路完成,用戶饋電、鈴流都由測試頭控制,語音處理也在測試頭中完成,局端的話機接在測試頭上,與交換機或接入設備本身無關。而使用內置測試功能時,與用戶的交互只能通過打電話的方式建立,并利用接入設備本身的通用振鈴和語音電路。因此進行話機測試時,需先打通電話,才能進行振鈴和話機測試。故采用內置測試方案,交互測試不能沿用測試頭測試的流程。本文設計的正是這樣一種內線測試方案。
本系統可以多線程地進行測試。對于不同網元的測試,允許并行進行,不需要等待結果返回后再開始新的測試;允許接收多條測試指令,對不同NE的測試也可以并行進行,在測試過程中可以接收和執行新的測試命令。
1 系統概況
本測試系統如圖1所示,大容量綜合接入" title="綜合接入">綜合接入網關(AG)可以連接到網管中心的網管系統上,該系統同時具備網元管理功能和業務管理功能。模塊Agent 112可以對其所管轄的綜合接入網關進行窄帶線路測試" title="線路測試">線路測試,Agent 112與112中心之間通過協議轉換器112MD 實現對接。
與外接測試頭不同的是,112中心可通過IP網發命令到112MD的 Socket接口來實現線路測試功能,而傳統的程控電話網的外置測試系統中,還需單獨組建測試頭的網管通道。
1.1 主要測試功能
綜合接入網關實現的本測試系統符合電總112集中測試協議和接口規范[2]。
用戶線路測試主要包括內線測試(電路測試)、外線測試(線路測試)以及配合測試(終端測試)三部分,各地具體的要求也是在此基礎進行添加的。
(1)電路測試:包括撥號音測試、饋電電壓測試、回路電流測試等。
(2)線路測試:包括群測(12項外線測試)、測用戶線路交流電壓值(AB、AG、BG)、測用戶線路直流電壓值(AB、AG、BG)、測用戶環路直流電流值(AB)、測用戶環路電阻值(AB)、測用戶線路絕緣電阻值(AB、AG、BG)、測用戶線路電容值(AB、AG、BG)以及測用戶線路阻抗(AB、AG、BG)等。
(3)終端測試:包括對被測用戶振鈴、測試用戶話機雙音頻特性或脈沖特性、對用戶話機送嗥鳴音等。
1.2 工作過程
112中心在TS處設置數據,使所有綜合接入網關的用戶都通過112MD(相當于一個新增的CS)來測試。112測試由人工坐席或AVR(自動應答器)發起,TS收到測試請求后,如果是綜合接入網關的用戶,則會向112MD發出測試請求,112MD收到測試請求后,通過Agent 112的測試接口向相應的綜合接入網關發送測試命令,網關測試完畢后將測試結果" title="測試結果">測試結果反饋給Agent 112,再由112MD進行協議轉換后發送給TS,至此完成一次測試過程。
2 系統設計及實現
2.1 總體設計
本系統主要包括112MD、Agent、綜合接入網關和用戶終端等模塊[3]。
112MD是一個協議轉換器,測試中心發送112標準請求時,112MD負責接收并將協議轉換成1355標準,再發送給Agent 112;Agent 112主要負責轉化基于1355SAP的線路測試需求和結果并調用RAMI ,即進行命令分析,根據對應的測試命令對綜合接入網關進行相應的測試;綜合接入網關可以使一個單一節點向一個地區提供多種接入業務。
網管系統與本測試系統的接口通信協議采用TCP/IP協議。低層協議推薦使用x.25和ATM,也可以根據實際情況選用其他支持IP的低層協議[4]。
2.2 多線程的實現
多線程測試是在Agent 112模塊中實現的。該模塊的程序代碼以WIN2000為平臺,用VC++6.0編寫[5]。Agent 112模塊包含1355SAP Entity、Agent 112 Proxy、Log Record Module(日志記錄模塊)、Core Process Module(內核進程模塊)和DN Translator Service(DN轉換服務)五個部分,如圖2所示。
1355SAP Entity實現了Agent Socket接入點接口。當Agent 運行時,它與調解設備進行通信,從解調設備獲取LT需求并返回結果。在這個模塊中還有一個緩沖區用來保存MD中的數據。當其收到線路測試需求時,首先驗證此需求的有效性。如果有效,它便在核心程序模塊中調用接口函數以啟動測試程序。
內核進程模塊是此應用軟件的主要模塊,它控制了整個測試程序,同時負責創建1355SAP Entity、日志記錄模塊,以及啟動proxy的object,通過測試數據執行測試。
日志文檔 是Agent 112和Topological View的共同點。Agent 112通過在日志文檔中記錄的所有關于被請求的測試(包括錯誤)信息來追蹤測試。同時,通過Main View,操作者可以查看這些日志文檔。當Agent 112啟動時,它便會核對日志文檔。如果日志文檔不存在,便建立log file。如果已經存在,便打開以記錄。記錄的最大數量為1 000。如果超過該范圍,便寫在第一條記錄上。
Agent 112 Proxy是一個獨立程序,而且它也是一個短周期的進程。這就意味著當Agent收到有效的LT需求時它開始運行,返回結果時,它便關閉。
在Agent 112 Proxy與NE之間,使用了一個私有接口RAMI。RAMI是一系列的PRC調用。
2.2.1 類CAgent 112 Main
這個類與核心程序模塊的軟件架構是一致的。
client thread 啟動,此class? instance便被創建。它管理著整個線路控制程序。socket connection關閉,它便會被一起刪掉。
2.2.2? Agent 112 Proxy
Agent 112 Proxy負責與NE通信。它通過C而不是C++實現。它的功能是進行線路測試。消息程序流程圖如圖3所示。
線路測試開始,Agent 112便啟動Agent 112 Proxy并通過Windows Message發送測試命令,然后,Windows Message通過CCPE與NE通信,發送測試命令給NE,幾秒鐘后,NE通知Windows Message測試完成,Agent 112 Proxy收到,并從NE得到結果,把結果通過Windows Message送到Agent 112,最后Agent 112 Proxy自己結束。
2.2.3 類CTestReport
對于每個NE的測試,都可以啟動一個獨立的線程TestThread進行測試,并等待接收測試報告。
線程中主要包含了一個CTestReport類型的對象。CTestReport類是CAgent112Main類的子類。由于測試和等待結果的功能改在子線程中實現,所以,原有的類結構模型也不再適用。但是由于功能間的數據耦合緊密,所以采用了繼承的方式分割。CTestReport類的成員保存了測試命令的有關指數和測試結果的相關信息。CTestReport類還提供了兩個成員函數PerformTest()和ResultReport(),分別實現進行測試和返回測試結果的功能。使用數組pLTObject[m_Index]存儲指向該類的對象指針,方便在結果返回時能夠找到對應的對象。而pLTObject的索引號與NE名在InTestNE[NENum]中的索引號一致,由m_Index表示。
pLTObject [m_Index]= pTestReport;
在得到返回的測試結果時,逐一進行比較,找到對應的對象:
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;
??}
???? }
在進行測試時,因等待測試結果需要一定的時間,在這個過程中線程將會掛起,直到結果到來才被解掛。
由于測試由單線程變為多線程,需要處理一些同步機制。在將一些測試參數傳遞至子線程時,要保證在傳遞之前這些信息不能被改動,可以利用信號量來進行同步。再一次使用對象時首先需要進行判斷,然后賦值,最后釋放資源[6]。
if(WaitForSingleObject(hBuffWaiting,60000)
???????????? //for synchronization
???????? == WAIT_TIMEOUT)
SetEvent(hBuffWaiting);
另外,有些命令由多個子命令組成。在第一個子命令還未完成時,第二個子命令應處于等待狀態,故而使用dwWaitResult=WaitForSingleObject(pLTObject[i]->GetHandle(),500); 來實現。
通過NE名找到對應的測試線程,所以,首先需要找到NE名,在這種情況下,創建函數GetNEName()來獲得NE名。
在CAgent112Main類中增加HANDLE m_hTestThread用來記錄線程的句柄,以便在測試結果返回時能夠找到對應的線程。
增加一個數組InTestNE[i]記錄正在進行測試的NE名。該數組在生成線程之前用來檢測NE是否符合要求。如果要測試的NE名已經存在,說明該NE已經在進行測試,暫時不能接受新的測試命令,這條命令將會被駁回,返回一個rcode=53的錯誤;反之,認為該NE符合要求,將會為其啟動測試線程,進行測試,并且在InTestNE[i]找到空位置,存儲該NE名。
針對這種情況,新增加一種錯誤信息,即53號錯誤信息。
Agent 112_MESSAGE_ERROR*NEBusy=new Agent 112_MESSAGE_ERROR;
NEBusy->rcode = 53;
pAgent112 Main->ReturnError(TOE_NE,NEBusy);
在C1355SAP->ReturnEorror()中,加入處理過程,并進行錯誤處理。
if(pError->rcode==53)????????????????
sprintf(szTemp,"TOE,NE,%d,\"NE in Testing\"",pError->rcode);
在啟動測試線程后,需要將由AnalyzeCMD()得到的信息從主線程傳遞至子線程,所以對于C1355SAP類型的數據采用賦值重用的方式封裝。這樣
C1355SAP & C1355SAP::operator=(const C1355SAP& c1355sap)
CAgent112Main的析構函數~CAgent112Main()的實現發生改變。在單線程測試時,CAgent112Main類對象pAgent112Main生命周期結束時,一輪測試結束,socket可以關閉,所以可以將closesocket放在析構函數~CAgent112Main()中實現。但是在多線程測試時,某一個NE測試結束并不能代表連接的結束,socket也不能關閉,所以,closesocket改在停止測試時實現。
在接收命令部分,允許多條指令的同時輸入。引入一個數組m_CommandBuff記錄輸入的多條命令,ComIndex指示正在進行測試的命令的索引,ComNum表示一次讀入的命令數。這個命令數不一定就是一次發送的命令的條數,它還與接收指令的Buff大小有關。它只能表示Agent 112一次從112MD收到的命令的條數。
在測試部分,將啟用新的線程,并發的執行測試功能不影響新的命令的接收。
3 測試比較
在傳統的單線程測試過程中,每次只能發給Agent 112一個測試指令,并且只有在Agent 112發回測試結果后才能發送下一條命令。在等待測試結果的過程中,計算機處于閑置狀態,不能對其他的NE進行測試。而在本系統中,允許同時接收多條測試指令,并且對不同NE的測試可以并發進行,在進行測試的過程中,可以接收和執行新的測試命令。但是對同一個NE,一次只允許一條命令進行測試。經過測試比較兩種情況分別如圖4所示。
在發送命令時,打開一個超級終端,連接到本機127.0.0.1:9009端口。寫好一個文本,例如命名為112command.txt,然后寫入命令:
INVOKEID=900 FEEDVOL TYPE=1:AGNENAME="ne0" AGNEIP=10.8.127.217 RACKNO=1 FRMNO=1 SLOTNO=8 PORTNO=4;
最后在超級終端-傳送-發送文本文件,選取此文件發送過去。測試結果會顯示在112MD和超級終端界面中。
本文設計了一種基于多線程的NGN綜合接入網關測試系統,其在測試速度和性能方面較之單線程測試系統有很大的提高,是目前發展的熱點。
參考文獻
[1]孔小斌,章萍.接入網112線路測試技術與實現[J].電信科學,2000,(6):36-38.
[2]接入網112電總規范. 中國電信,1999,(6).
[3]趙慧玲,葉華.以軟交換為核心的下一代網絡技術[M].北京:人民郵電出版社,2002:30-56.
[4]W. RICHARD STEVENS. TCP/IP Illustrated Volume1:The ?Protocols[M].北京:機械工業出版社,2005:20-100.
[5]黃維通. Visual C++面向對象與可視化程序設計[M].北京:清華大學出版社,2000:10-250.
[6]Jeffrey Richter.Windows 高級編程指南[M].北京:清華大學出版社,2001:47-59.




