1.一種LTE空口監(jiān)測儀基帶板原始數(shù)據(jù)保存、查詢及回放方法,其特征在于,采用數(shù)據(jù)文件和索引文件的方式保存、查詢或回放數(shù)據(jù);在讀取基帶板原始數(shù)據(jù)的同時對每一個基帶板原始數(shù)據(jù)按基帶板卡獨(dú)立連續(xù)的編號,為每一個數(shù)據(jù)包創(chuàng)建索引節(jié)點(diǎn)信息并記錄其大小和存儲在數(shù)據(jù)文件中的位置;同時,將原始數(shù)據(jù)保存在數(shù)據(jù)文件中的對應(yīng)位置,將索引節(jié)點(diǎn)信息保存在索引文件中。
2.根據(jù)權(quán)利要求1所述LTE空口監(jiān)測儀基帶板原始數(shù)據(jù)保存、查詢及回放方法,其特征在于,所述數(shù)據(jù)文件和索引文件采用不同的后綴名,所述數(shù)據(jù)文件的后綴名為.dat,用于保存基帶板原始數(shù)據(jù),采用cardid_datanum.dat方式命名,其中,cardid為不同的基帶板編號,datanum為數(shù)據(jù)段編號,從0開始,當(dāng)該文件長度超過1GBytes時datanum依自然數(shù)依次增加;所述索引文件后綴名為.idx文件,用于搜索基帶板原始數(shù)據(jù)在.dat文件中的偏移地址及長度,包括,基帶板原始數(shù)據(jù)查詢索引cardid_idxnum.idx文件和基帶板原始數(shù)據(jù)回放索引recordname_pbidxnum.idx文件;基帶板原始數(shù)據(jù)的存放結(jié)構(gòu)即為一個名稱為recordname的文件下存放有基帶板原始數(shù)據(jù)查詢索引文件cardid_idxnum.idx、基帶板原始數(shù)據(jù)回放索引文件recordname_pbidxnum.idx和基帶板原始數(shù)據(jù)保存文件cardid_datanum.dat。
其中:
recordname為主控板通過發(fā)送層二板存儲記錄名稱設(shè)定數(shù)據(jù)包請求層二板為該條記錄設(shè)置的名稱。
cardid_idxnum.idx為基帶板原始數(shù)據(jù)查詢索引文件,用于對基帶板原始數(shù)據(jù)查詢;文件中保存有編號為cardid的基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU的索引,每一個文件包含10000000個索引節(jié)點(diǎn),可實(shí)現(xiàn)主控板查詢原始數(shù)據(jù)MAC PDU,主控板在查詢時只需提供sequence number,簡寫為seq_num;層二板可以根據(jù)record name和seq_num快速查找到指定序列號的原始數(shù)據(jù)MAC PDU位于cardid_datanum.dat的位置及長度。
recordname_pbidxnum.idx為基帶板原始數(shù)據(jù)回放索引文件,用于對基帶板原始數(shù)據(jù)進(jìn)行回放,在讀取到所有基帶板原始數(shù)據(jù)之后,將各基帶板原始數(shù)據(jù)的索引節(jié)點(diǎn)依次寫入到該文件,可實(shí)現(xiàn)基帶板原始數(shù)據(jù)回放,在回放時依次讀取索引節(jié)點(diǎn)中的每一個數(shù)據(jù)包的位置,并按照首次讀入數(shù)據(jù)的時序進(jìn)行回放。
cardid_datanum.dat為基帶板原始數(shù)據(jù)保存文件,cardid為基帶板卡編號,該文件最大為1GBytes。
3.根據(jù)權(quán)利要求2所述LTE空口監(jiān)測儀基帶板原始數(shù)據(jù)保存、查詢及回放方法,其特征在于,每個.idx文件中存放若干個索引節(jié)點(diǎn)search_index_node數(shù)據(jù)結(jié)構(gòu),并且,
search_index_node數(shù)據(jù)結(jié)構(gòu)如下:
基帶板原始數(shù)據(jù)MAC PDU查詢請求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
基帶板原始數(shù)據(jù)MAC PDU回放請求數(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é)果。
4.根據(jù)權(quán)利要求3所述LTE空口監(jiān)測儀基帶板原始數(shù)據(jù)保存、查詢及回放方法,其特征在于,所述LTE空口監(jiān)測儀基帶板原始數(shù)據(jù)保存,包括以下步驟:
層二板接收到基帶板原始數(shù)據(jù)后均需要對其進(jìn)行保存,各基帶板原始數(shù)據(jù)的保存相互獨(dú)立且同時進(jìn)行,各基帶板原始數(shù)據(jù)的保存流程如下:
S11:基帶板原始數(shù)據(jù)輸入;
S12:層二板軟件接收基帶板原始數(shù)據(jù)并存入數(shù)據(jù)緩存區(qū);
S13:對每個原始數(shù)據(jù)包按照不同基帶板卡號進(jìn)行編號,計(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為不同的基帶板編號,datanum為數(shù)據(jù)段編號,從0開始,當(dāng)該文件長度超過1GBytes時datanum依自然數(shù)依次增加;
所述cardid_idxnum.idx為基帶板原始數(shù)據(jù)查詢索引文件,用于對基帶板原始數(shù)據(jù)查詢;文件中保存有編號為cardid的基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU的索引,每一個文件包含10000000個索引節(jié)點(diǎn),可實(shí)現(xiàn)主控板查詢原始數(shù)據(jù)MAC PDU,主控板在查詢時只需提供sequence number,簡寫為seq_num;層二板可以根據(jù)record name和seq_num快速查找到指定序列號的原始數(shù)據(jù)MAC PDU位于cardid_datanum.dat的位置及長度;
S16:將各板卡的索引緩沖按板卡號依次連續(xù)的拷貝到另一塊索引緩沖區(qū),不進(jìn)行數(shù)據(jù)存儲;
S17:將回放索引緩沖區(qū)數(shù)據(jù)寫入recordname_pbidxnum.idx文件中,該基帶板回放索引數(shù)據(jù)保存完成;
所述recordname_pbidxnum.idx為基帶板原始數(shù)據(jù)回放索引文件,用于對基帶板原始數(shù)據(jù)進(jìn)行回放,在讀取到所有基帶板原始數(shù)據(jù)之后,將各基帶板原始數(shù)據(jù)的索引節(jié)點(diǎn)依次寫入到該文件,可實(shí)現(xiàn)基帶板原始數(shù)據(jù)回放,在回放時依次讀取索引節(jié)點(diǎn)中的每一個數(shù)據(jù)包的位置,并按照首次讀入數(shù)據(jù)的時序進(jìn)行回放;并且,每個.idx文件中存放若干個索引節(jié)點(diǎn)search_index_node數(shù)據(jù)結(jié)構(gòu),并且,search_index_node數(shù)據(jù)結(jié)構(gòu)如下:
S18:更新原始數(shù)據(jù)存儲文件cardid_datanum.dat、查詢索引文件cardid_idxnum.idx、回放索引文件recordname_pbidxnum.idx結(jié)尾位置,以進(jìn)行下次的原始數(shù)據(jù)存儲;
S19:基帶板原始數(shù)據(jù)保存流程結(jié)束。
5.根據(jù)權(quán)利要求3所述LTE空口監(jiān)測儀基帶板原始數(shù)據(jù)保存、查詢及回放方法,其特征在于,所述LTE空口監(jiān)測儀基帶板原始數(shù)據(jù)查詢,包括以下步驟:
層二板在接收到一個查詢請求數(shù)據(jù)子包PKT_REQUEST_QUERY_MAC_PDU,將會進(jìn)入到基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU查詢處理流程,流程如下:
S21:層二板接收主控板原始數(shù)據(jù)包;
S22:層二板對主控板原始數(shù)據(jù)包進(jìn)行解析,解析原始數(shù)據(jù)包類型;
S23:判斷原始數(shù)據(jù)包的類型是否為0x1400,即是否為查詢請求數(shù)據(jù)子包PKT_REQUEST_QUERY_MAC_PDU,是則,執(zhí)行步驟S24,否則,不能進(jìn)入數(shù)據(jù)查詢流程,轉(zhuǎn)為執(zhí)行步驟S27;
S24:解析查詢請求數(shù)據(jù)子包得到基帶板原始數(shù)據(jù)MAC PDU查詢請求數(shù)據(jù)子包載荷REQ_MACPDU_sub_payload,基帶板原始數(shù)據(jù)MAC PDU查詢請求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
根據(jù)該結(jié)構(gòu)獲取需要查詢的存儲記錄名稱recordname、索引號seq_num、板卡號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_nodeidx_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ù)板卡號cardid和索引號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é)束。
6.根據(jù)權(quán)利要求3所述LTE空口監(jiān)測儀基帶板原始數(shù)據(jù)保存、查詢及回放方法,其特征在于,所述LTE空口監(jiān)測儀基帶板原始數(shù)據(jù)回放,包括以下步驟:
層二板在接收到一個回放請求數(shù)據(jù)子包PKT_REQUEST_PLAYBACK_MAC_PDU后,將會進(jìn)入到基帶板原始數(shù)據(jù)媒體接入控制層分組數(shù)據(jù)單元MAC PDU回放處理流程,流程如下:
S31:層二板接收主控板原始數(shù)據(jù)包;
S32:層二板對主控板原始數(shù)據(jù)包進(jìn)行解析,解析原始數(shù)據(jù)包類型;
S33:判斷該原始數(shù)據(jù)包類型是否為0x1401,即是否為回放請求數(shù)據(jù)子包PKT_REQUEST_PLAYBACK_MAC_PDU,若是,執(zhí)行步驟S34,否則,不能進(jìn)入數(shù)據(jù)回放流程,轉(zhuǎn)為執(zhí)行步驟S37;
S34:解析回放請求數(shù)據(jù)子包得到基帶板原始數(shù)據(jù)MAC PDU回放請求數(shù)據(jù)包載荷PLAYBACK_MACPDU_sub_payload,并且,基帶板原始數(shù)據(jù)MAC PDU回放請求數(shù)據(jù)子包載荷結(jié)構(gòu)如下:
通過該結(jié)構(gòu)獲取需要回放的存儲記錄名稱recordname,并在存儲區(qū)查找該記錄;
讀取第一個文件recordname_0.idx開始,讀取該文件中的每一個索引節(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ù)板卡號cardid和索引號seq_num,讀取文件找到指定的原始數(shù)據(jù)MAC PDU所在位置,更新big_pkt_data,big_pkt_size;
S36:判斷big_pkt_data是否為空或者big_pkt_size是否為0,兩者滿足其一,退出該流程,即未查詢到請求回放的原始數(shù)據(jù)MAC PDU,轉(zhuǎn)為執(zhí)行步驟S37;否則,數(shù)據(jù)回放完成,進(jìn)入LTE載荷處理,并將原始數(shù)據(jù)交給層二協(xié)議棧處理;
S37:基帶板原始數(shù)據(jù)回放流程結(jié)束。