本發(fā)明涉及LTE空口監(jiān)測(cè)儀的設(shè)計(jì)技術(shù),具體涉及到一種LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存、查詢及回放方法。
背景技術(shù):
LTE空口監(jiān)測(cè)儀是采集和解析LTE空口信號(hào)的儀器,其產(chǎn)生是LTE網(wǎng)絡(luò)架構(gòu)扁平化的結(jié)果,相對(duì)于3G網(wǎng)絡(luò),LTE網(wǎng)絡(luò)減少了無線網(wǎng)絡(luò)控制器RNC網(wǎng)元和Iub接口。在3G網(wǎng)絡(luò)中可通過Iub接口監(jiān)測(cè)的信息,在LTE網(wǎng)絡(luò)中需要在Uu接口監(jiān)測(cè)獲取,由此,空口監(jiān)測(cè)儀表的作用尤為重要。
Iub是RNC和NODE B之間的接口,用來傳輸RNC和NODE B之間的信令以及來自無線接口的數(shù)據(jù)。空中接口(無線接口)主要用來建立、重配置和釋放各種無線承載業(yè)務(wù),和Iu接口一樣,空中接口也是一個(gè)完全開放的接口。
現(xiàn)有技術(shù)LTE空口監(jiān)測(cè)儀通常包括輸入數(shù)據(jù)解析模塊、數(shù)據(jù)存儲(chǔ)模塊、LTE載荷數(shù)據(jù)解析模塊、無線資源控制RRC解析模塊和配置模塊。其中,輸入數(shù)據(jù)解析模塊主要功能是獲取其他單板寫入的數(shù)據(jù),并進(jìn)行解析分類,然后把數(shù)據(jù)傳遞給對(duì)應(yīng)的后續(xù)處理模塊。數(shù)據(jù)存儲(chǔ)模塊功能主要是存儲(chǔ)輸入數(shù)據(jù),并包含數(shù)據(jù)查詢;LTE載荷數(shù)據(jù)解析模塊主要功能是解析輸入的LTE載荷,包含媒體接入控制MAC子層、無線鏈路控制RLC子層及分組匯聚協(xié)議PDCP子層等LTE Layer2協(xié)議解析;RRC解析模塊主要功能是解析信令無線承載SRB0、SRB1、SRB2數(shù)據(jù),并把基帶板需要的配置信息傳輸給基帶板;配置模塊的主要功能是根據(jù)輸入數(shù)據(jù)或者解析結(jié)果配置層二板及基帶板。
現(xiàn)有技術(shù)LTE空口監(jiān)測(cè)儀表中,層二板需要與基帶板及主控板進(jìn)行數(shù)據(jù)交互,在基帶板的原始數(shù)據(jù)保存查詢及回放的過程中,需要占用較大的存儲(chǔ)空間,使其對(duì)原始數(shù)據(jù)查詢工作困難,很難對(duì)原始數(shù)據(jù)做到有序的回放。
顯然,現(xiàn)有技術(shù)LTE空口監(jiān)測(cè)儀表存在著基帶板在原始數(shù)據(jù)保存查詢及回放的過程中,需要占用較大的存儲(chǔ)空間,使其對(duì)原始數(shù)據(jù)查詢工作困難,很難對(duì)原始數(shù)據(jù)做到有序的回放等問題。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有技術(shù)LTE空口監(jiān)測(cè)儀表存在的基帶板在原始數(shù)據(jù)保存查詢及回放的過程中,需要占用較大的存儲(chǔ)空間,使其對(duì)原始數(shù)據(jù)查詢工作困難,很難對(duì)原始數(shù)據(jù)做到有序的回放等問題,本發(fā)明提出一種LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存、查詢及回放方法。
本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存、查詢及回放方法,采用數(shù)據(jù)文件和索引文件的方式保存、查詢或回放數(shù)據(jù);在讀取基帶板原始數(shù)據(jù)的同時(shí)對(duì)每一個(gè)基帶板原始數(shù)據(jù)按基帶板卡獨(dú)立連續(xù)的編號(hào),為每一個(gè)數(shù)據(jù)包創(chuàng)建索引節(jié)點(diǎn)信息并記錄其大小和存儲(chǔ)在數(shù)據(jù)文件中的位置;同時(shí),將原始數(shù)據(jù)保存在數(shù)據(jù)文件中的對(duì)應(yīng)位置,將索引節(jié)點(diǎn)信息保存在索引文件中。
進(jìn)一步的,所述數(shù)據(jù)文件和索引文件采用不同的后綴名,所述數(shù)據(jù)文件的后綴名為.dat,用于保存基帶板原始數(shù)據(jù),采用cardid_datanum.dat方式命名,其中,cardid為不同的基帶板編號(hào),datanum為數(shù)據(jù)段編號(hào),從0開始,當(dāng)該文件長度超過1GBytes時(shí)datanum依自然數(shù)依次增加;所述索引文件后綴名為.idx文件,用于搜索基帶板原始數(shù)據(jù)在.dat文件中的偏移地址及長度,包括,基帶板原始數(shù)據(jù)查詢索引cardid_idxnum.idx文件和基帶板原始數(shù)據(jù)回放索引recordname_pbidxnum.idx文件;基帶板原始數(shù)據(jù)的存放結(jié)構(gòu)即為一個(gè)名稱為recordname的文件下存放有基帶板原始數(shù)據(jù)查詢索引文件cardid_idxnum.idx、基帶板原始數(shù)據(jù)回放索引文件recordname_pbidxnum.idx和基帶板原始數(shù)據(jù)保存文件cardid_datanum.dat。
其中:
recordname為主控板通過發(fā)送層二板存儲(chǔ)記錄名稱設(shè)定數(shù)據(jù)包請(qǐng)求層二板為該條記錄設(shè)置的名稱。
cardid_idxnum.idx為基帶板原始數(shù)據(jù)查詢索引文件,用于對(duì)基帶板原始數(shù)據(jù)查詢;文件中保存有編號(hào)為cardid的基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU的索引,每一個(gè)文件包含10000000個(gè)索引節(jié)點(diǎn),可實(shí)現(xiàn)主控板查詢?cè)紨?shù)據(jù)MAC PDU,主控板在查詢時(shí)只需提供sequence number,簡寫為seq_num;層二板可以根據(jù)record name和seq_num快速查找到指定序列號(hào)的原始數(shù)據(jù)MAC PDU位于cardid_datanum.dat的位置及長度。
recordname_pbidxnum.idx為基帶板原始數(shù)據(jù)回放索引文件,用于對(duì)基帶板原始數(shù)據(jù)進(jìn)行回放,在讀取到所有基帶板原始數(shù)據(jù)之后,將各基帶板原始數(shù)據(jù)的索引節(jié)點(diǎn)依次寫入到該文件,可實(shí)現(xiàn)基帶板原始數(shù)據(jù)回放,在回放時(shí)依次讀取索引節(jié)點(diǎn)中的每一個(gè)數(shù)據(jù)包的位置,并按照首次讀入數(shù)據(jù)的時(shí)序進(jìn)行回放。
cardid_datanum.dat為基帶板原始數(shù)據(jù)保存文件,cardid為基帶板卡編號(hào),該文件最大為1GBytes。
進(jìn)一步的,每個(gè).idx文件中存放若干個(gè)索引節(jié)點(diǎn)search_index_node數(shù)據(jù)結(jié)構(gòu),并且,
search_index_node數(shù)據(jù)結(jié)構(gòu)如下:
基帶板原始數(shù)據(jù)MAC PDU查詢請(qǐng)求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
基帶板原始數(shù)據(jù)MAC PDU回放請(qǐng)求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
并且,定義PKT_REQUEST_QUERY_MAC_PDU原始數(shù)據(jù)查詢子包為常量0x1400,PKT_REQUEST_PLAYBACK_MAC_PDU原始數(shù)據(jù)回放子包為常量0x1401,定義big_pkt_data,big_pkt_size變量,用以判斷解析結(jié)果。
進(jìn)一步的,所述LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存,包括以下步驟:
層二板接收到基帶板原始數(shù)據(jù)后均需要對(duì)其進(jìn)行保存,各基帶板原始數(shù)據(jù)的保存相互獨(dú)立且同時(shí)進(jìn)行,各基帶板原始數(shù)據(jù)的保存流程如下:
S11:基帶板原始數(shù)據(jù)輸入;
S12:層二板軟件接收基帶板原始數(shù)據(jù)并存入數(shù)據(jù)緩存區(qū);
S13:對(duì)每個(gè)原始數(shù)據(jù)包按照不同基帶板卡號(hào)進(jìn)行編號(hào),計(jì)算數(shù)據(jù)包在文件中的結(jié)束位置和長度,填寫查詢索引節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)至索引緩沖區(qū);
S14:判斷緩沖區(qū)是否已滿,或者文件是否大于1GBytes,兩者滿足其一即執(zhí)行步驟S15,否則,執(zhí)行步驟S16;
S15:將數(shù)據(jù)緩存區(qū)的原始數(shù)據(jù)和查詢索引緩沖區(qū)的索引數(shù)據(jù)分別寫入cardid_datanum.dat文件中和cardid_idxnum.idx文件中;該基帶板原始數(shù)據(jù)和查詢索引數(shù)據(jù)保存完成,執(zhí)行步驟S16;
其中,所述cardid_datanum.dat文件用于保存基帶板的原始數(shù)據(jù),其中,cardid為不同的基帶板編號(hào),datanum為數(shù)據(jù)段編號(hào),從0開始,當(dāng)該文件長度超過1GBytes時(shí)datanum依自然數(shù)依次增加;
所述cardid_idxnum.idx為基帶板原始數(shù)據(jù)查詢索引文件,用于對(duì)基帶板原始數(shù)據(jù)查詢;文件中保存有編號(hào)為cardid的基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU的索引,每一個(gè)文件包含10000000個(gè)索引節(jié)點(diǎn),可實(shí)現(xiàn)主控板查詢?cè)紨?shù)據(jù)MAC PDU,主控板在查詢時(shí)只需提供sequence number,簡寫為seq_num;層二板可以根據(jù)record name和seq_num快速查找到指定序列號(hào)的原始數(shù)據(jù)MAC PDU位于cardid_datanum.dat的位置及長度;
S16:將各板卡的索引緩沖按板卡號(hào)依次連續(xù)的拷貝到另一塊索引緩沖區(qū),不進(jìn)行數(shù)據(jù)存儲(chǔ);
S17:將回放索引緩沖區(qū)數(shù)據(jù)寫入recordname_pbidxnum.idx文件中,該基帶板回放索引數(shù)據(jù)保存完成;
所述recordname_pbidxnum.idx為基帶板原始數(shù)據(jù)回放索引文件,用于對(duì)基帶板原始數(shù)據(jù)進(jìn)行回放,在讀取到所有基帶板原始數(shù)據(jù)之后,將各基帶板原始數(shù)據(jù)的索引節(jié)點(diǎn)依次寫入到該文件,可實(shí)現(xiàn)基帶板原始數(shù)據(jù)回放,在回放時(shí)依次讀取索引節(jié)點(diǎn)中的每一個(gè)數(shù)據(jù)包的位置,并按照首次讀入數(shù)據(jù)的時(shí)序進(jìn)行回放;并且,每個(gè).idx文件中存放若干個(gè)索引節(jié)點(diǎn)search_index_node數(shù)據(jù)結(jié)構(gòu),并且,search_index_node數(shù)據(jù)結(jié)構(gòu)如下:
S18:更新原始數(shù)據(jù)存儲(chǔ)文件cardid_datanum.dat、查詢索引文件cardid_idxnum.idx、回放索引文件recordname_pbidxnum.idx結(jié)尾位置,以進(jìn)行下次的原始數(shù)據(jù)存儲(chǔ);
S19:基帶板原始數(shù)據(jù)保存流程結(jié)束。
進(jìn)一步的,所述LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)查詢,包括以下步驟:
層二板在接收到一個(gè)查詢請(qǐng)求數(shù)據(jù)子包PKT_REQUEST_QUERY_MAC_PDU,將會(huì)進(jìn)入到基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU查詢處理流程,流程如下:
S21:層二板接收主控板原始數(shù)據(jù)包;
S22:層二板對(duì)主控板原始數(shù)據(jù)包進(jìn)行解析,解析原始數(shù)據(jù)包類型;
S23:判斷原始數(shù)據(jù)包的類型是否為0x1400,即是否為查詢請(qǐng)求數(shù)據(jù)子包PKT_REQUEST_QUERY_MAC_PDU,是則,執(zhí)行步驟S24,否則,不能進(jìn)入數(shù)據(jù)查詢流程,轉(zhuǎn)為執(zhí)行步驟S27;
S24:解析查詢請(qǐng)求數(shù)據(jù)子包得到基帶板原始數(shù)據(jù)MAC PDU查詢請(qǐng)求數(shù)據(jù)子包載荷REQ_MACPDU_sub_payload,基帶板原始數(shù)據(jù)MAC PDU查詢請(qǐng)求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
根據(jù)該結(jié)構(gòu)獲取需要查詢的存儲(chǔ)記錄名稱recordname、索引號(hào)seq_num、板卡號(hào)cardid;
通過REQ_MACPDU_sub_payload結(jié)構(gòu)體中的成員name得到recordname;
通過成員seq_num_HI的高4bit得到cardid;
通過成員seq_num_HI的低28bit向左移位28bit與成員seq_num_LO相或得到seq_num;
通過seq_num/10000000得到idxfilenum;
通過(seq_num%10000000)*sizeof(search_index_node)得到在cardid_idxnum.idx中的偏移為idx_offset;
在cardid_idxnum.idx讀取偏移為idx_offset的索引節(jié)點(diǎn)struct_search_index_node idx_node;
通過索引文件結(jié)構(gòu)體參量idx_node.pkt_len得到原始數(shù)據(jù)MAC PDU長度pktlen;
通過idx_node.file_num得到datfilenum;
通過idx_node.end_offset得到原始數(shù)據(jù)MAC PDU在cardid_datfilenum.dat中的偏移位置dat_offset;
在cardid_datnum.dat的dat_offset位置讀取pktlen長度的數(shù)據(jù)即得到了所需的原始數(shù)據(jù)MAC PDU;
S25:初始化big_pkt_data為空,big_pkt_size為0;根據(jù)板卡號(hào)cardid和索引號(hào)seq_num,讀取文件找到指定的原始數(shù)據(jù)MAC PDU所在位置,更新big_pkt_data,big_pkt_size;
S26:判斷big_pkt_data是否為空或者big_pkt_size是否為0,兩者滿足其一,說明未找到查詢數(shù)據(jù),發(fā)送定義為0x1303常量的PKT_QUERY_MAC_PDU_ACK應(yīng)答包,轉(zhuǎn)為執(zhí)行步驟S27;否則,將找到的原始數(shù)據(jù)MAC PDU數(shù)據(jù)包重組,并將組包后的數(shù)據(jù)發(fā)送到主控板,數(shù)據(jù)查詢完成;
S27:基帶板原始數(shù)據(jù)查詢流程結(jié)束。
進(jìn)一步的,所述LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)回放,包括以下步驟:
層二板在接收到一個(gè)回放請(qǐng)求數(shù)據(jù)子包PKT_REQUEST_PLAYBACK_MAC_PDU后,將會(huì)進(jìn)入到基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU回放處理流程,流程如下:
S31:層二板接收主控板原始數(shù)據(jù)包;
S32:層二板對(duì)主控板原始數(shù)據(jù)包進(jìn)行解析,解析原始數(shù)據(jù)包類型;
S33:判斷該原始數(shù)據(jù)包類型是否為0x1401,即是否為回放請(qǐng)求數(shù)據(jù)子包PKT_REQUEST_PLAYBACK_MAC_PDU,若是,執(zhí)行步驟S34,否則,不能進(jìn)入數(shù)據(jù)回放流程,轉(zhuǎn)為執(zhí)行步驟S37;
S34:解析回放請(qǐng)求數(shù)據(jù)子包得到基帶板原始數(shù)據(jù)MAC PDU回放請(qǐng)求數(shù)據(jù)包載荷PLAYBACK_MACPDU_sub_payload,并且,基帶板原始數(shù)據(jù)MAC PDU回放請(qǐng)求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
通過該結(jié)構(gòu)獲取需要回放的存儲(chǔ)記錄名稱recordname,并在存儲(chǔ)區(qū)查找該記錄;
讀取第一個(gè)文件recordname_0.idx開始,讀取該文件中的每一個(gè)索引節(jié)點(diǎn)struct_search_index_node idx_node,根據(jù)結(jié)構(gòu)體成員idx_node.pkt_len得到原始數(shù)據(jù)MAC PDU長度pktlen;根據(jù)結(jié)構(gòu)體成員idx_node.file_num得到datfilenum,根據(jù)結(jié)構(gòu)體成員idx_node.end_offset得到原始數(shù)據(jù)MAC PDU在cardid_datnum.dat中的偏移dat_offset;
在cardid_datnum.dat的dat_offset位置讀取pktlen長度的數(shù)據(jù)即得到了所需的原始數(shù)據(jù)MAC PDU;
S35:初始化big_pkt_data為空,big_pkt_size為0;根據(jù)板卡號(hào)cardid和索引號(hào)seq_num,讀取文件找到指定的原始數(shù)據(jù)MAC PDU所在位置,更新big_pkt_data,big_pkt_size;
S36:判斷big_pkt_data是否為空或者big_pkt_size是否為0,兩者滿足其一,退出該流程,即未查詢到請(qǐng)求回放的原始數(shù)據(jù)MAC PDU,轉(zhuǎn)為執(zhí)行步驟S37;否則,數(shù)據(jù)回放完成,進(jìn)入LTE載荷處理,并將原始數(shù)據(jù)交給層二協(xié)議棧處理;
S37:基帶板原始數(shù)據(jù)回放流程結(jié)束。
本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存、查詢及回放方法的有益技術(shù)效果是可實(shí)現(xiàn)主控板快速準(zhǔn)確地查找到指定的原始數(shù)據(jù)MAC PDU以及對(duì)原始數(shù)據(jù)按照輸入的時(shí)序有序地進(jìn)行回放操作,有利于Layer2軟件數(shù)據(jù)解析,提高解析效率。
附圖說明
附圖1為本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存流程示意圖;
附圖2為本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)查詢流程示意圖;
附圖3為本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)回放流程示意圖。
下面結(jié)合附圖對(duì)本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存、查詢及回放方法作進(jìn)一步的說明。
具體實(shí)施方式
顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí)施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存、查詢及回放方法,采用數(shù)據(jù)文件和索引文件的方式保存、查詢或回放數(shù)據(jù);在讀取基帶板原始數(shù)據(jù)的同時(shí)對(duì)每一個(gè)基帶板原始數(shù)據(jù)按基帶板卡獨(dú)立連續(xù)的編號(hào),為每一個(gè)數(shù)據(jù)包創(chuàng)建索引節(jié)點(diǎn)信息并記錄其大小和存儲(chǔ)在數(shù)據(jù)文件中的位置;同時(shí),將原始數(shù)據(jù)保存在數(shù)據(jù)文件中的對(duì)應(yīng)位置,將索引節(jié)點(diǎn)信息保存在索引文件中。其中,所述數(shù)據(jù)文件和索引文件采用不同的后綴名,所述數(shù)據(jù)文件的后綴名為.dat,用于保存基帶板原始數(shù)據(jù),采用cardid_datanum.dat方式命名,其中,cardid為不同的基帶板編號(hào),datanum為數(shù)據(jù)段編號(hào),從0開始,當(dāng)該文件長度超過1GBytes時(shí)datanum依自然數(shù)依次增加;所述索引文件后綴名為.idx文件,用于搜索基帶板原始數(shù)據(jù)在.dat文件中的偏移地址及長度,包括,基帶板原始數(shù)據(jù)查詢索引cardid_idxnum.idx文件和基帶板原始數(shù)據(jù)回放索引recordname_pbidxnum.idx文件;基帶板原始數(shù)據(jù)的存放結(jié)構(gòu)即為一個(gè)名稱為recordname的文件下存放有基帶板原始數(shù)據(jù)查詢索引文件cardid_idxnum.idx、基帶板原始數(shù)據(jù)回放索引文件recordname_pbidxnum.idx和基帶板原始數(shù)據(jù)保存文件cardid_datanum.dat;
其中:
recordname為主控板通過發(fā)送層二板存儲(chǔ)記錄名稱設(shè)定數(shù)據(jù)包請(qǐng)求層二板為該條記錄設(shè)置的名稱。
cardid_idxnum.idx為基帶板原始數(shù)據(jù)查詢索引文件,用于對(duì)基帶板原始數(shù)據(jù)查詢;文件中保存有編號(hào)為cardid的基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU的索引,每一個(gè)文件包含10000000個(gè)索引節(jié)點(diǎn),可實(shí)現(xiàn)主控板查詢?cè)紨?shù)據(jù)MAC PDU,主控板在查詢時(shí)只需提供sequence number,簡寫為seq_num;層二板可以根據(jù)record name和seq_num快速查找到指定序列號(hào)的原始數(shù)據(jù)MAC PDU位于cardid_datanum.dat的位置及長度。
recordname_pbidxnum.idx為基帶板原始數(shù)據(jù)回放索引文件,用于對(duì)基帶板原始數(shù)據(jù)進(jìn)行回放,在讀取到所有基帶板原始數(shù)據(jù)之后,將各基帶板原始數(shù)據(jù)的索引節(jié)點(diǎn)依次寫入到該文件,可實(shí)現(xiàn)基帶板原始數(shù)據(jù)回放,在回放時(shí)依次讀取索引節(jié)點(diǎn)中的每一個(gè)數(shù)據(jù)包的位置,并按照首次讀入數(shù)據(jù)的時(shí)序進(jìn)行回放。
cardid_datanum.dat為基帶板原始數(shù)據(jù)保存文件,cardid為基帶板卡編號(hào),該文件最大為1GBytes。
為便于原始數(shù)據(jù)查詢和回放,本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存、查詢及回放方法的每個(gè).idx文件中存放若干個(gè)索引節(jié)點(diǎn)search_index_node數(shù)據(jù)結(jié)構(gòu),并且,
search_index_node數(shù)據(jù)結(jié)構(gòu)如下:
基帶板原始數(shù)據(jù)MAC PDU查詢請(qǐng)求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
基帶板原始數(shù)據(jù)MAC PDU回放請(qǐng)求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
并且,定義PKT_REQUEST_QUERY_MAC_PDU原始數(shù)據(jù)查詢子包為常量0x1400,PKT_REQUEST_PLAYBACK_MAC_PDU原始數(shù)據(jù)回放子包為常量0x1401,定義big_pkt_data,big_pkt_size變量,用以判斷解析結(jié)果。
附圖1為本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存流程示意圖,由圖可知,所述LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存,包括以下步驟:
層二板接收到基帶板原始數(shù)據(jù)后均需要對(duì)其進(jìn)行保存,各基帶板原始數(shù)據(jù)的保存相互獨(dú)立且同時(shí)進(jìn)行,各基帶板原始數(shù)據(jù)的保存流程如下:
S11:基帶板原始數(shù)據(jù)輸入;
S12:層二板軟件接收基帶板原始數(shù)據(jù)并存入數(shù)據(jù)緩存區(qū);
S13:對(duì)每個(gè)原始數(shù)據(jù)包按照不同基帶板卡號(hào)進(jìn)行編號(hào),計(jì)算數(shù)據(jù)包在文件中的結(jié)束位置和長度,填寫查詢索引節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)至索引緩沖區(qū);
S14:判斷緩沖區(qū)是否已滿,或者文件是否大于1GBytes,兩者滿足其一即執(zhí)行步驟S15,否則,執(zhí)行步驟S16;
S15:將數(shù)據(jù)緩存區(qū)的原始數(shù)據(jù)和查詢索引緩沖區(qū)的索引數(shù)據(jù)分別寫入cardid_datanum.dat文件中和cardid_idxnum.idx文件中;該基帶板原始數(shù)據(jù)和查詢索引數(shù)據(jù)保存完成,執(zhí)行步驟S16;其中,
所述cardid_datanum.dat文件用于保存基帶板的原始數(shù)據(jù),其中,cardid為不同的基帶板編號(hào),datanum為數(shù)據(jù)段編號(hào),從0開始,當(dāng)該文件長度超過1GBytes時(shí)datanum依自然數(shù)依次增加;
所述cardid_idxnum.idx為基帶板原始數(shù)據(jù)查詢索引文件,用于對(duì)基帶板原始數(shù)據(jù)查詢;文件中保存有編號(hào)為cardid的基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU的索引,每一個(gè)文件包含10000000個(gè)索引節(jié)點(diǎn),可實(shí)現(xiàn)主控板查詢?cè)紨?shù)據(jù)MAC PDU,主控板在查詢時(shí)只需提供sequence number,簡寫為seq_num;層二板可以根據(jù)record name和seq_num快速查找到指定序列號(hào)的原始數(shù)據(jù)MAC PDU位于cardid_datanum.dat的位置及長度;
S16:將各板卡的索引緩沖按板卡號(hào)依次連續(xù)的拷貝到另一塊索引緩沖區(qū),不進(jìn)行數(shù)據(jù)存儲(chǔ);
S17:將回放索引緩沖區(qū)數(shù)據(jù)寫入recordname_pbidxnum.idx文件中,該基帶板回放索引數(shù)據(jù)保存完成;其中,
所述recordname_pbidxnum.idx為基帶板原始數(shù)據(jù)回放索引文件,用于對(duì)基帶板原始數(shù)據(jù)進(jìn)行回放,在讀取到所有基帶板原始數(shù)據(jù)之后,將各基帶板原始數(shù)據(jù)的索引節(jié)點(diǎn)依次寫入到該文件,可實(shí)現(xiàn)基帶板原始數(shù)據(jù)回放,在回放時(shí)依次讀取索引節(jié)點(diǎn)中的每一個(gè)數(shù)據(jù)包的位置,并按照首次讀入數(shù)據(jù)的時(shí)序進(jìn)行回放;并且,每個(gè).idx文件中存放若干個(gè)索引節(jié)點(diǎn)search_index_node數(shù)據(jù)結(jié)構(gòu),并且,search_index_node數(shù)據(jù)結(jié)構(gòu)如下:
S18:更新原始數(shù)據(jù)存儲(chǔ)文件cardid_datanum.dat、查詢索引文件cardid_idxnum.idx、回放索引文件recordname_pbidxnum.idx結(jié)尾位置,以進(jìn)行下次的原始數(shù)據(jù)存儲(chǔ);
S19:基帶板原始數(shù)據(jù)保存流程結(jié)束。
附圖2為本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)查詢流程示意圖,由圖可知,所述LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)查詢,包括以下步驟:
層二板在接收到一個(gè)查詢請(qǐng)求數(shù)據(jù)子包PKT_REQUEST_QUERY_MAC_PDU,將會(huì)進(jìn)入到基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU查詢處理流程,流程如下:
S21:層二板接收主控板原始數(shù)據(jù)包;
S22:層二板對(duì)主控板原始數(shù)據(jù)包進(jìn)行解析,解析原始數(shù)據(jù)包類型;
S23:判斷原始數(shù)據(jù)包的類型是否為0x1400,即是否為查詢請(qǐng)求數(shù)據(jù)子包PKT_REQUEST_QUERY_MAC_PDU,是則,執(zhí)行步驟S24,否則,不能進(jìn)入數(shù)據(jù)查詢流程,轉(zhuǎn)為執(zhí)行步驟S27;
S24:解析查詢請(qǐng)求數(shù)據(jù)子包得到基帶板原始數(shù)據(jù)MAC PDU查詢請(qǐng)求數(shù)據(jù)子包載荷REQ_MACPDU_sub_payload,基帶板原始數(shù)據(jù)MAC PDU查詢請(qǐng)求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
根據(jù)該結(jié)構(gòu)獲取需要查詢的存儲(chǔ)記錄名稱recordname、索引號(hào)seq_num、板卡號(hào)cardid;
通過REQ_MACPDU_sub_payload結(jié)構(gòu)體中的成員name得到recordname;
通過成員seq_num_HI的高4bit得到cardid;
通過成員seq_num_HI的低28bit向左移位28bit與成員seq_num_LO相或得到seq_num;
通過seq_num/10000000得到idxfilenum;
通過(seq_num%10000000)*sizeof(search_index_node)得到在cardid_idxnum.idx中的偏移為idx_offset;
在cardid_idxnum.idx讀取偏移為idx_offset的索引節(jié)點(diǎn)struct_search_index_node idx_node;
通過索引文件結(jié)構(gòu)體參量idx_node.pkt_len得到原始數(shù)據(jù)MAC PDU長度pktlen;
通過idx_node.file_num得到datfilenum;
通過idx_node.end_offset得到原始數(shù)據(jù)MAC PDU在cardid_datfilenum.dat中的偏移位置dat_offset;
在cardid_datnum.dat的dat_offset位置讀取pktlen長度的數(shù)據(jù)即得到了所需的原始數(shù)據(jù)MAC PDU;
S25:初始化big_pkt_data為空,big_pkt_size為0;根據(jù)板卡號(hào)cardid和索引號(hào)seq_num,讀取文件找到指定的原始數(shù)據(jù)MAC PDU所在位置,更新big_pkt_data,big_pkt_size;
S26:判斷big_pkt_data是否為空或者big_pkt_size是否為0,兩者滿足其一,說明未找到查詢數(shù)據(jù),發(fā)送定義為0x1303常量的PKT_QUERY_MAC_PDU_ACK應(yīng)答包,轉(zhuǎn)為執(zhí)行步驟S27;否則,將找到的原始數(shù)據(jù)MAC PDU數(shù)據(jù)包重組,并將組包后的數(shù)據(jù)發(fā)送到主控板,數(shù)據(jù)查詢完成;
S27:基帶板原始數(shù)據(jù)查詢流程結(jié)束。
附圖3為本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)回放流程示意圖,由圖可知,所述LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)回放,包括以下步驟:
層二板在接收到一個(gè)回放請(qǐng)求數(shù)據(jù)子包PKT_REQUEST_PLAYBACK_MAC_PDU后,將會(huì)進(jìn)入到基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU回放處理流程,流程如下:
S31:層二板接收主控板原始數(shù)據(jù)包;
S32:層二板對(duì)主控板原始數(shù)據(jù)包進(jìn)行解析,解析原始數(shù)據(jù)包類型;
S33:判斷該原始數(shù)據(jù)包類型是否為0x1401,即是否為回放請(qǐng)求數(shù)據(jù)子包PKT_REQUEST_PLAYBACK_MAC_PDU,若是,執(zhí)行步驟S34,否則,不能進(jìn)入數(shù)據(jù)回放流程,轉(zhuǎn)為執(zhí)行步驟S37;
S34:解析回放請(qǐng)求數(shù)據(jù)子包得到基帶板原始數(shù)據(jù)MAC PDU回放請(qǐng)求數(shù)據(jù)包載荷PLAYBACK_MACPDU_sub_payload,基帶板原始數(shù)據(jù)MAC PDU回放請(qǐng)求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
通過該結(jié)構(gòu)可獲取需要回放的存儲(chǔ)記錄名稱recordname,并在存儲(chǔ)區(qū)查找該記錄;
讀取第一個(gè)文件recordname_0.idx開始,讀取該文件中的每一個(gè)索引節(jié)點(diǎn)struct_search_index_node idx_node,根據(jù)結(jié)構(gòu)體成員idx_node.pkt_len得到原始數(shù)據(jù)MAC PDU長度pktlen;根據(jù)結(jié)構(gòu)體成員idx_node.file_num得到datfilenum,根據(jù)結(jié)構(gòu)體成員idx_node.end_offset得到原始數(shù)據(jù)MAC PDU在cardid_datnum.dat中的偏移dat_offset;
在cardid_datnum.dat的dat_offset位置讀取pktlen長度的數(shù)據(jù)即得到了所需的原始數(shù)據(jù)MAC PDU;
S35:初始化big_pkt_data為空,big_pkt_size為0;根據(jù)板卡號(hào)cardid和索引號(hào)seq_num,讀取文件找到指定的原始數(shù)據(jù)MAC PDU所在位置,更新big_pkt_data,big_pkt_size;
S36:判斷big_pkt_data是否為空或者big_pkt_size是否為0,兩者滿足其一,退出該流程,即未查詢到請(qǐng)求回放的原始數(shù)據(jù)MAC PDU,轉(zhuǎn)為執(zhí)行步驟S37;否則,數(shù)據(jù)回放完成,進(jìn)入LTE載荷處理,并將原始數(shù)據(jù)交給層二協(xié)議棧處理;
S37:基帶板原始數(shù)據(jù)回放流程結(jié)束。
顯然,本發(fā)明LTE空口監(jiān)測(cè)儀基帶板原始數(shù)據(jù)保存、查詢及回放方法的有益技術(shù)效果是可實(shí)現(xiàn)主控板快速準(zhǔn)確地查找到指定的原始數(shù)據(jù)MAC PDU以及對(duì)原始數(shù)據(jù)按照輸入的時(shí)序有序地進(jìn)行回放操作,有利于Layer2軟件數(shù)據(jù)解析,提高解析效率。