董沛然,賀 信
(中國人民解放軍海軍七○四工廠,山東青島266109)
在遠程控制領域中,網(wǎng)絡化控制技術已經(jīng)成熟,一對一、一對多的控制實現(xiàn)較為方便。但在艦船通信裝備控制網(wǎng)絡中,需要具有串行和從屬關系的多級鏈路的控制應用,在相對復雜的應用情況下,多級鏈路的狀態(tài)維護非常麻煩。
利用SIP可以方便地建立起多級鏈路,SIP協(xié)議自帶的狀態(tài)機組足以應付復雜的多級鏈路控制;同時在鏈路建立的情況下,SIP協(xié)議中的INFO方法可以方便地傳輸、交換私有控制信息和反饋信息。
SIP是互聯(lián)網(wǎng)工程任務組(Internet Engineering Task Force,IETF)標準體系中的一部分,是一個應用層的信令控制協(xié)議,用于創(chuàng)建、修改和釋放一個或多個參與者的會話。這些會話可以好似Internet多媒體會議、IP電話或多媒體分發(fā)。會話的參與者可以通過組播(Multicast)、網(wǎng)狀單播(Unicast)或二者的混合體進行通信。SIP的一個重要特點是它不定義要建立的會話的類型,而只定義應該如何管理會話。有了這種靈活性,也就意味著SIP可以用于眾多應用和服務中,包括交互式游戲、音樂和視頻點播以及語音、視頻和Web會議。
SIP能成為軟交換體系中的一個非常重要的協(xié)議,原因在于它被認為是一個標準組件或部件,可以非常靈活地搭配其他協(xié)議使用,比如SIP加上RTP協(xié)議就能方便地實現(xiàn)音視頻等多媒體的傳輸控制。SIP獨立工作于底層網(wǎng)絡傳輸協(xié)議和媒體,底層傳輸可以是采用ATM的IP,傳輸協(xié)議可以是UDP或TCP。它規(guī)定1個或多個參與方的終端設備如何能夠建立、修改和中斷連接,而不論是語音、視頻、數(shù)據(jù)或基于Web的內(nèi)容。
SIP較為靈活,可擴展,而且是開放的。使用SIP協(xié)議,編程人員可以在不影響連接的情況下在消息中增加上層應用的新信息。
在安全性方面,SIP提供了一套完整的安全服務機制,包括防止拒絕服務、認證服務、完整性保證、加密和隱私服務。
由于作戰(zhàn)勤務的需要,艦船通信裝備一般構成一個多級的通信網(wǎng)絡,前端用戶終端為上級鏈路,完成對通信裝備的集中調(diào)用、控制和使用;中間級鏈路為信道設備,提供信道為用戶終端所選擇;下級鏈路為輔助處理設備,如數(shù)據(jù)、報文處理和加密等設備。不同艦船可以根據(jù)裝備配置的不同構成3級、4級甚至更多級的通信鏈路。
艦船通信裝備網(wǎng)絡控制系統(tǒng)用于實現(xiàn)艦船通信網(wǎng)絡的多級通信鏈路,由多個用戶終端(UU)和網(wǎng)絡控制器(NCU)組成,用戶終端是遠程控制的終端設備,網(wǎng)絡控制器是實現(xiàn)艦船通信裝備網(wǎng)絡接入的設備,多個用戶終端和網(wǎng)絡控制構成一個完整的IP網(wǎng)絡。整個控制網(wǎng)絡體系如圖1所示。
圖1 艦船通信裝備網(wǎng)絡控制系統(tǒng)體系結構
典型的通信裝備多鏈路控制工作流程如下:
①UU作為上鏈設備發(fā)出控制指令至連接加密設備的NCU(中鏈設備),要求使用加密功能;
②中鏈設備的NCU在完成本鏈設備的控制后,發(fā)送控制指令至連接信道設備的NCU(下鏈設備),要求將加密后的語音數(shù)據(jù)發(fā)送出去;
③下鏈設備的NCU在完成設備控制后,需要將準備妥當(設備OK)的信息逐級回送至上鏈設備。
網(wǎng)絡控制器硬件部分主要提供控制設備用的RS232/RS422串口、100M以太網(wǎng)接口以及用于語音輸出的四線音頻接口,同時提供軟件運行的環(huán)境。具體可分為:電源模塊、CPU主控模塊、外圍接口模塊。
CPU主控模塊完成對接口模塊的硬件初始化控制和提供軟件運行的環(huán)境。CPU選用MINDSPEED公司基于ARM9核的M82515,PBGA封裝。此芯片的核電壓為1.2 V,I/O口電壓3.3 V。該模塊CPU系統(tǒng)配置為:BOOTROM 512 K,SDRAM 64 M,FLASH 8 M。
外圍接口模塊,提供控制用接口,本系統(tǒng)提供4個RS232/422串行控制口,1路四線音頻接口,1個FE網(wǎng)絡接口,8路擴展并行I/O口。串口采用芯片SC16C654和MAX3160設計實現(xiàn),網(wǎng)口PHY芯片為RT8201bl,外圍接口與 CPU通信通過CPLD LCMXO256C橋接。
3.2.1 整體結構設計
網(wǎng)絡控制器軟件部分基于VxWorks系統(tǒng)開發(fā),采用C語言編寫,控制主機軟件部分基于Windows Xp系統(tǒng)開發(fā),采用C++語言編寫。
引導程序完成內(nèi)存空間劃分、時鐘初始化,將程序代碼復制到SDRAM后跳轉(zhuǎn)到SDRAM中運行。在SDRAM中運行時,首先對MINDSPEED的RS232/FEC(快速以太網(wǎng))進行初始化,包括MAC地址、IP地址;然后跳轉(zhuǎn)到應用程序入口(main_proc)開始應用程序的運行。
應用程序分為SIP協(xié)議處理模塊、綜合處理模塊和設備控制模塊。SIP協(xié)議處理模塊主要實現(xiàn)標準SIP協(xié)議流程,將INFO消息中BODY體取出交給綜合處理模塊;綜合處理模塊完成對 INFO消息BODY體的解析、處理和再生,同時驅(qū)動SIP協(xié)議處理模塊和設備控制模塊的運行;設備控制模塊接受來自綜合處理模塊的消息,通過RS232/RS422串口、擴展I/O口、四線音頻接口與設備進行控制、交互。
3.2.2 SIP協(xié)議處理模塊實現(xiàn)
SIP協(xié)議處理模塊的實現(xiàn)是基于SIP開源協(xié)議棧OSIP2和EXOSIP設計開發(fā)。
Osip2是一個開放源代碼的sip協(xié)議棧,是開源代碼中不多使用C語言寫的協(xié)議棧之一,具有短小簡潔的特點,專注于sip底層解析使得它的效率比較高。其缺點也很明顯,首先就是可用性差,沒有很好的api封裝,使得上層應用在調(diào)用協(xié)議棧時很破碎;其次,只做到了transaction層次的協(xié)議過程解析,缺少call、session和dialog等過程的解析,這也增加了使用的難度;再次,缺少線程并發(fā)處理的機制,使得它的處理能力有限。
eXosip是Osip2的一個擴展協(xié)議集,部分封裝了Osip2協(xié)議棧,使得更容易被使用。eXosip增加了call、dialog、registration 和 subscription 等過程的解析 ,使得實用性更強。綜合來說,Osip2加上eXosip協(xié)議棧是實現(xiàn)Sip協(xié)議不錯的選擇。
OSIP2和EXOSIP初始化完成后,SIP協(xié)議處理模塊中SIP信令實現(xiàn)流程如圖2所示。
圖2 SIPelse信令處理流程
核心代碼如下:
void eXosipTask(void)
{
eXosip_event_ t *je=NULL;
je=eXosip_ event_wait( 0,SIP_MAX_WAIT_EVENT_
SECONDS);
eXosip_lock( );
eXosip_ default_action( je);
eXosip_automatic_ refresh();
eXosip_unlock();
if(je==NULL)
{
return;
}
if(je->type<=EXOSIP _REGISTRATION_TERMINATED)
{
eXosipRegisterMsgHdl(je);/*注冊處理*/
}
else if(je->type<=EXOSIP_CALL_INVITE)
{
eXosipCallMsgHdl(je);/*呼叫處理*/
}
else if(je->type<=EXOSIP_CALL_RELEASED)
{
eXosipCallNoInviteMsgHdl(je);/*非INVITE處理*/
}
/*省略一些其他事件解析代碼*/
else
{
Printf(“ ===eXosip:Unknown Event Type=%d” ,je->type);
}
if(je!=NULL)
{
eXosip event free(je);
}
應用層消息是通過INFO消息來傳送的。SIP INFO方法是在rfc2976中定義的,INFO消息的目的是沿著SIP信令通路攜帶應用層消息,INFO方法并不改變SIP呼叫的狀態(tài)。因此使用INFO方法傳送應用層消息必須先建立SIP信令通路的連接,INFO消息是在非INVITE事件中處理的。建立和傳送INFO的核心代碼如下:
STATUS eXosipSendInfo(UI OsipFsmID,UC const*Info)
{
OSIP FSM ID pOsipFsm;
int iResult;
osip _ message _ t*pInfoMsg=NULL;
osip _cseq _ t*pCseq=NULL;
UL CSeq;
UI FsmID;
pOsipFsm=OsipFsmGetPtr(OsipFsmID);
eXosip_call_build _ info( pOsipFsm->did,&pInfoMsg);
osip_message_set_body( pInfoMsg,Info,strlen(Info));
osip _message _set _content _type (pInfoMsg,
“ application/sdp”);
{
pCseq=osip _ message _ get_cseq(pInfoMsg);
CSeq=atol(pCseq->number);
}
eXosip_ lock();
eXosip _call _send _request (pOsipFsm->did,
pInfoMsg);
eXosip_unlock( );
return 0;
}
接收到INFO后的處理流程如圖3所示。
圖3 接收INFO后的處理流程
艦船通信裝備網(wǎng)絡控制系統(tǒng)實現(xiàn)了SIP協(xié)議在多級鏈路控制系統(tǒng)中應用,通過SIP協(xié)議棧建立INFO傳送的通道,避免了各級鏈路繁雜的狀態(tài)處理,程序設計簡潔方便,系統(tǒng)中各級鏈路均能按照預定的控制模型執(zhí)行。該設計實現(xiàn)了SIP協(xié)議在艦船通信設備控制領域的應用,具有廣泛的工程應用價值。
[1]徐培文,謝水珍,楊從保.軟交換與SIP實用技術[M].北京:機械工業(yè)出版社,2007.
[2]周啟平,張 楊.VxWorks下設備驅(qū)動程序及BSP開發(fā)指南[M].北京:中國電力出版社,2004.
[3]程敬原.VxWorks軟件開發(fā)項目實例完全解析[M].北京:中國電力出版社,2005.
[4]黃永峰,李建慶.下一代網(wǎng)絡核心控制協(xié)議:SIP及其應____用[M].北京:人民郵電出版社,2009.