1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
4 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
5 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
6 <meta name="generator" content="Doxygen 1.8.13"/>
7 <meta name="viewport" content="width=device-width, initial-scale=1"/>
8 <title>o-du/phy: u_plane_functional.cc Source File</title>
9 <link href="tabs.css" rel="stylesheet" type="text/css"/>
10 <script type="text/javascript" src="jquery.js"></script>
11 <script type="text/javascript" src="dynsections.js"></script>
12 <link href="search/search.css" rel="stylesheet" type="text/css"/>
13 <script type="text/javascript" src="search/searchdata.js"></script>
14 <script type="text/javascript" src="search/search.js"></script>
15 <link href="doxygen.css" rel="stylesheet" type="text/css" />
18 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
20 <table cellspacing="0" cellpadding="0">
22 <tr style="height: 56px;">
23 <td id="projectalign" style="padding-left: 0.5em;">
24 <div id="projectname">o-du/phy
26 <div id="projectbrief">Intel O-RAN/X-RAN Generated Doxygen Documentation</div>
32 <!-- end header part -->
33 <!-- Generated by Doxygen 1.8.13 -->
34 <script type="text/javascript">
35 var searchBox = new SearchBox("searchBox", "search",false,'Search');
37 <script type="text/javascript" src="menudata.js"></script>
38 <script type="text/javascript" src="menu.js"></script>
39 <script type="text/javascript">
41 initMenu('',true,false,'search.php','Search');
42 $(document).ready(function() { init_search(); });
45 <div id="main-nav"></div>
46 <!-- window showing the filter options -->
47 <div id="MSearchSelectWindow"
48 onmouseover="return searchBox.OnSearchSelectShow()"
49 onmouseout="return searchBox.OnSearchSelectHide()"
50 onkeydown="return searchBox.OnSearchSelectKey(event)">
53 <!-- iframe showing the search results (closed by default) -->
54 <div id="MSearchResultsWindow">
55 <iframe src="javascript:void(0)" frameborder="0"
56 name="MSearchResults" id="MSearchResults">
60 <div id="nav-path" class="navpath">
62 <li class="navelem"><a class="el" href="dir_a4c74d6baed87eba72f3b201b7b4b8f2.html">fhi_lib</a></li><li class="navelem"><a class="el" href="dir_babe8eacf738372576863f88f66866a5.html">test</a></li><li class="navelem"><a class="el" href="dir_eb25680e5ae075ef825a327f00297047.html">test_xran</a></li> </ul>
66 <div class="headertitle">
67 <div class="title">u_plane_functional.cc</div> </div>
69 <div class="contents">
70 <a href="u__plane__functional_8cc.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/******************************************************************************</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">*</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">* Copyright (c) 2019 Intel.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">*</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">* Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">* you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">* You may obtain a copy of the License at</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">*</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">* http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">*</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">* Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">* distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">* See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">* limitations under the License.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">*</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">*******************************************************************************/</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "<a class="code" href="common_8hpp.html">common.hpp</a>"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "<a class="code" href="xran__common_8h.html">xran_common.h</a>"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "<a class="code" href="xran__up__api_8h.html">xran_up_api.h</a>"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "<a class="code" href="xran__fh__o__du_8h.html">xran_fh_o_du.h</a>"</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "<a class="code" href="ethernet_8h.html">ethernet.h</a>"</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <stdint.h></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="u__plane__functional_8cc.html#a69b4bff6061152ff85770d725cced3cc"> 28</a></span> <span class="keyword">const</span> std::string <a class="code" href="u__plane__functional_8cc.html#a69b4bff6061152ff85770d725cced3cc">module_name</a> = <span class="stringliteral">"u-plane"</span>;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="class_u__plane_check.html"> 30</a></span> <span class="keyword">class </span><a class="code" href="class_u__plane_check.html">U_planeCheck</a> : <span class="keyword">public</span> <a class="code" href="class_kernel_tests.html">KernelTests</a></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> {</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="class_u__plane_check.html#a814db5f2ff5eb8cff5caf3ea1b473475"> 33</a></span>  <span class="keyword">struct </span>rte_mbuf *<a class="code" href="class_u__plane_check.html#a814db5f2ff5eb8cff5caf3ea1b473475">test_buffer</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="class_u__plane_check.html#ad3c8fd8da54a8693b6ea41565af2ad19"> 34</a></span>  <span class="keywordtype">char</span> * <a class="code" href="class_u__plane_check.html#ad3c8fd8da54a8693b6ea41565af2ad19">iq_offset</a>;</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="class_u__plane_check.html#aab306187cd86e6270f16af7fac1d0a63"> 35</a></span>  <span class="keyword">struct </span>rte_mempool *<a class="code" href="class_u__plane_check.html#aab306187cd86e6270f16af7fac1d0a63">test_eth_mbuf_pool</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="class_u__plane_check.html#a3a1707f6479611fdc609a3eb8a0cef1b"> 37</a></span>  <span class="keywordtype">void</span> <a class="code" href="class_u__plane_check.html#a3a1707f6479611fdc609a3eb8a0cef1b">SetUp</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="class_kernel_tests.html#abf28e5ea54fab2b0685972fe6e75560a">init_test</a>(<span class="stringliteral">"u_plane_functional"</span>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  test_buffer = (<span class="keyword">struct </span>rte_mbuf*)rte_pktmbuf_alloc(<a class="code" href="ethernet_8c.html#a8d83e3adb6c9e839b3b7259288f100ba">_eth_mbuf_pool</a>);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">if</span>(test_buffer == NULL) {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  std::cout << __func__ << <span class="stringliteral">":"</span> << __LINE__ << <span class="stringliteral">" Failed to allocatte a packet buffer!"</span> << std::endl;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  }</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  iq_offset = rte_pktmbuf_mtod(test_buffer, <span class="keywordtype">char</span> * );</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  iq_offset = iq_offset + <span class="keyword">sizeof</span>(<span class="keyword">struct </span>ether_hdr) +</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  sizeof (struct xran_ecpri_hdr) +</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  sizeof (struct radio_app_common_hdr) +</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  sizeof(struct data_section_hdr);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">/* It's called after an execution of the each test case.*/</span></div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="class_u__plane_check.html#ac4fca95dc3b93372ce7f2078baf8e8b6"> 54</a></span>  <span class="keywordtype">void</span> <a class="code" href="class_u__plane_check.html#ac4fca95dc3b93372ce7f2078baf8e8b6">TearDown</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  rte_pktmbuf_free(test_buffer);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> };</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment">/* simple test of DL and UL functionality */</span></div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="u__plane__functional_8cc.html#a17e5d82ac5aec3860b1324a80fda79ed"> 61</a></span> <a class="code" href="u__plane__functional_8cc.html#a17e5d82ac5aec3860b1324a80fda79ed">TEST_P</a>(<a class="code" href="class_u__plane_check.html">U_planeCheck</a>, Test_DLUL)</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">enum</span> <a class="code" href="group__xran__common__pkt.html#ga9c60a23fdae979ad1842b255790d1558">xran_pkt_dir</a> direction = <a class="code" href="group__xran__common__pkt.html#gga9c60a23fdae979ad1842b255790d1558a19f3d3cee814f10e4f3bf7d80194083f">XRAN_DIR_DL</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  uint16_t section_id = 7;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">enum</span> <a class="code" href="xran__fh__o__du_8h.html#ab5ce6839bae2968c79930a0bfa17f4d8">xran_input_byte_order</a> iq_buf_byte_order = <a class="code" href="xran__fh__o__du_8h.html#ab5ce6839bae2968c79930a0bfa17f4d8ae0b667dc04b0baacb15bc9c40b776098">XRAN_CPU_LE_BYTE_ORDER</a>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  uint8_t frame_id = 99;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  uint8_t subframe_id = 9;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  uint8_t slot_id = 10;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  uint8_t symbol_no = 7;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">int</span> prb_start = 0;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordtype">int</span> prb_num = 66;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  uint8_t CC_ID = 0;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  uint8_t RU_Port_ID = 0;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  uint8_t seq_id =0;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  uint32_t do_copy = 0;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  uint8_t compMeth = 0;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  uint8_t iqWidth = 16;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  int32_t prep_bytes;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">struct </span><a class="code" href="structxran__ecpri__hdr.html">xran_ecpri_hdr</a> *ecpri_hdr = NULL;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">struct </span><a class="code" href="structradio__app__common__hdr.html">radio_app_common_hdr</a> *app_hdr = NULL;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">struct </span><a class="code" href="structdata__section__hdr.html">data_section_hdr</a> *section_hdr = NULL;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordtype">char</span> *pChar = NULL;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  uint16_t payl_size = 0;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">struct </span><a class="code" href="structdata__section__hdr.html">data_section_hdr</a> res_sect;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  prep_bytes = <a class="code" href="xran__common_8c.html#adc9636576fb70f4b4fcfd1d03fe59998">prepare_symbol_ex</a>(direction,</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  section_id,</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <a class="code" href="class_u__plane_check.html#a814db5f2ff5eb8cff5caf3ea1b473475">test_buffer</a>,</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  (<span class="keyword">struct</span> <a class="code" href="structrb__map.html">rb_map</a> *)<a class="code" href="class_u__plane_check.html#ad3c8fd8da54a8693b6ea41565af2ad19">iq_offset</a>,</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  compMeth,</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  iqWidth,</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  iq_buf_byte_order,</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  frame_id,</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  subframe_id,</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  slot_id,</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  symbol_no,</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  prb_start,</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  prb_num,</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  CC_ID,</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  RU_Port_ID,</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  seq_id,</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  do_copy);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  ASSERT_EQ(prep_bytes, 3168);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  pChar = rte_pktmbuf_mtod(<a class="code" href="class_u__plane_check.html#a814db5f2ff5eb8cff5caf3ea1b473475">test_buffer</a>, <span class="keywordtype">char</span>*);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  ecpri_hdr = (<span class="keyword">struct </span><a class="code" href="structxran__ecpri__hdr.html">xran_ecpri_hdr</a> *)(pChar + <span class="keyword">sizeof</span>(<span class="keyword">struct</span> ether_hdr));</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  app_hdr = (<span class="keyword">struct </span><a class="code" href="structradio__app__common__hdr.html">radio_app_common_hdr</a> *)(pChar + <span class="keyword">sizeof</span>(<span class="keyword">struct</span> ether_hdr)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  + <span class="keyword">sizeof</span> (<span class="keyword">struct </span><a class="code" href="structxran__ecpri__hdr.html">xran_ecpri_hdr</a>));</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  section_hdr = (<span class="keyword">struct </span><a class="code" href="structdata__section__hdr.html">data_section_hdr</a> *)(pChar + <span class="keyword">sizeof</span>(<span class="keyword">struct</span> ether_hdr) +</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">sizeof</span> (<span class="keyword">struct </span><a class="code" href="structxran__ecpri__hdr.html">xran_ecpri_hdr</a>) +</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  sizeof(struct radio_app_common_hdr));</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  ASSERT_EQ (ecpri_hdr-><a class="code" href="structxran__ecpri__hdr.html#aa90ff3ad961fe295cdffddc945999212">cmnhdr</a>.<a class="code" href="structxran__ecpri__cmn__hdr.html#a5b41115e5686e3ff4f14c356a3aa209a">ecpri_mesg_type</a>, <a class="code" href="group__xran__common__pkt.html#gga5f49588115e2d0a807ad613ae866384aaef46b9a1a9d9f7c3276e1e99b02ef6de">ECPRI_IQ_DATA</a>);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  payl_size = rte_be_to_cpu_16(ecpri_hdr-><a class="code" href="structxran__ecpri__hdr.html#aa90ff3ad961fe295cdffddc945999212">cmnhdr</a>.<a class="code" href="structxran__ecpri__cmn__hdr.html#a61bf830b8866773b24cbca74ed3a4d6f">ecpri_payl_size</a>);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  ASSERT_EQ (payl_size, 3180);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  ASSERT_EQ(app_hdr-><a class="code" href="structradio__app__common__hdr.html#a40f66f521df9b1dbae9d0ee852c66e0d">data_direction</a>, direction);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  ASSERT_EQ(app_hdr-><a class="code" href="structradio__app__common__hdr.html#a03c1016ac46b9df250b994f242cf956a">frame_id</a>, frame_id);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  res_sect.<a class="code" href="structdata__section__hdr.html#a9f1bf385f4549249e191e6563acbdecb">fields</a>.<a class="code" href="structdata__section__hdr.html#a9f9f2f87d8b5cc7e4af6ef3e2c4c8189">all_bits</a> = rte_be_to_cpu_32(section_hdr-><a class="code" href="structdata__section__hdr.html#a9f1bf385f4549249e191e6563acbdecb">fields</a>.<a class="code" href="structdata__section__hdr.html#a9f9f2f87d8b5cc7e4af6ef3e2c4c8189">all_bits</a>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  ASSERT_EQ(res_sect.<a class="code" href="structdata__section__hdr.html#a9f1bf385f4549249e191e6563acbdecb">fields</a>.<a class="code" href="structdata__section__hdr.html#acb00c5e7ebe809fda7288c699eed867c">num_prbu</a>, prb_num);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  ASSERT_EQ(res_sect.<a class="code" href="structdata__section__hdr.html#a9f1bf385f4549249e191e6563acbdecb">fields</a>.<a class="code" href="structdata__section__hdr.html#a11d1616fb975ccafbc33ab590fe501c4">sect_id</a>, section_id);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="comment">/* UL direction */</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordtype">void</span> *iq_samp_buf;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">struct </span><a class="code" href="structecpri__seq__id.html">ecpri_seq_id</a> seq;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordtype">int</span> num_bytes = 0;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  uint8_t CC_ID = 0;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  uint8_t Ant_ID = 0;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  uint8_t frame_id = 0;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  uint8_t subframe_id = 0;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  uint8_t slot_id = 0;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  uint8_t symb_id = 0;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  uint8_t compMeth = 0;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  uint8_t iqWidth = 0;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  uint16_t num_prbu;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  uint16_t start_prbu;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  uint16_t sym_inc;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  uint16_t <a class="code" href="xran__pkt__cp_8h.html#affa3adbd50cd4af2018ba1fc0e8c3e31">rb</a>;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  uint16_t sect_id;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  int32_t prep_bytes;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordtype">char</span> *pChar = NULL;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  num_bytes = <a class="code" href="xran__up__api_8h.html#adfc5ea408600c8de1384be020b359d95">xran_extract_iq_samples</a>(<a class="code" href="class_u__plane_check.html#a814db5f2ff5eb8cff5caf3ea1b473475">test_buffer</a>,</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  &iq_samp_buf,</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  &CC_ID,</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  &Ant_ID,</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  &frame_id,</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  &subframe_id,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  &slot_id,</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  &symb_id,</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  &seq,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  &num_prbu,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  &start_prbu,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  &sym_inc,</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  &rb,</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  &sect_id,</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  0,</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  &compMeth,</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  &iqWidth);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  ASSERT_EQ(num_bytes, 3182);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  ASSERT_EQ(prb_num, 66);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  ASSERT_EQ(CC_ID, 0);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <a class="code" href="u__plane__functional_8cc.html#aa59dece42a6c30feedc30accb71c2001">INSTANTIATE_TEST_CASE_P</a>(UnitTest, <a class="code" href="class_u__plane_check.html">U_planeCheck</a>,</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  testing::ValuesIn(<a class="code" href="common_8cpp.html#a39bf4f7770751080f5b72046abfd01a5">get_sequence</a>(<a class="code" href="class_kernel_tests.html#a6157ff083be863bba0a7804cd1788d96">U_planeCheck::get_number_of_cases</a>(<span class="stringliteral">"u_plane_functional"</span>))));</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="ttc" id="structradio__app__common__hdr_html_a40f66f521df9b1dbae9d0ee852c66e0d"><div class="ttname"><a href="structradio__app__common__hdr.html#a40f66f521df9b1dbae9d0ee852c66e0d">radio_app_common_hdr::data_direction</a></div><div class="ttdeci">uint8_t data_direction</div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00173">xran_pkt.h:173</a></div></div>
71 <div class="ttc" id="class_u__plane_check_html_ac4fca95dc3b93372ce7f2078baf8e8b6"><div class="ttname"><a href="class_u__plane_check.html#ac4fca95dc3b93372ce7f2078baf8e8b6">U_planeCheck::TearDown</a></div><div class="ttdeci">void TearDown() override</div><div class="ttdef"><b>Definition:</b> <a href="u__plane__functional_8cc_source.html#l00054">u_plane_functional.cc:54</a></div></div>
72 <div class="ttc" id="u__plane__functional_8cc_html_a17e5d82ac5aec3860b1324a80fda79ed"><div class="ttname"><a href="u__plane__functional_8cc.html#a17e5d82ac5aec3860b1324a80fda79ed">TEST_P</a></div><div class="ttdeci">TEST_P(U_planeCheck, Test_DLUL)</div><div class="ttdef"><b>Definition:</b> <a href="u__plane__functional_8cc_source.html#l00061">u_plane_functional.cc:61</a></div></div>
73 <div class="ttc" id="group__xran__common__pkt_html_ga9c60a23fdae979ad1842b255790d1558"><div class="ttname"><a href="group__xran__common__pkt.html#ga9c60a23fdae979ad1842b255790d1558">xran_pkt_dir</a></div><div class="ttdeci">xran_pkt_dir</div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00146">xran_pkt.h:146</a></div></div>
74 <div class="ttc" id="xran__pkt__cp_8h_html_affa3adbd50cd4af2018ba1fc0e8c3e31"><div class="ttname"><a href="xran__pkt__cp_8h.html#affa3adbd50cd4af2018ba1fc0e8c3e31">rb</a></div><div class="ttdeci">uint32_t rb</div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt__cp_8h_source.html#l00243">xran_pkt_cp.h:243</a></div></div>
75 <div class="ttc" id="class_u__plane_check_html_ad3c8fd8da54a8693b6ea41565af2ad19"><div class="ttname"><a href="class_u__plane_check.html#ad3c8fd8da54a8693b6ea41565af2ad19">U_planeCheck::iq_offset</a></div><div class="ttdeci">char * iq_offset</div><div class="ttdef"><b>Definition:</b> <a href="u__plane__functional_8cc_source.html#l00034">u_plane_functional.cc:34</a></div></div>
76 <div class="ttc" id="class_kernel_tests_html_a6157ff083be863bba0a7804cd1788d96"><div class="ttname"><a href="class_kernel_tests.html#a6157ff083be863bba0a7804cd1788d96">KernelTests::get_number_of_cases</a></div><div class="ttdeci">static unsigned get_number_of_cases(const std::string &type)</div><div class="ttdef"><b>Definition:</b> <a href="common_8hpp_source.html#l00190">common.hpp:190</a></div></div>
77 <div class="ttc" id="structradio__app__common__hdr_html_a03c1016ac46b9df250b994f242cf956a"><div class="ttname"><a href="structradio__app__common__hdr.html#a03c1016ac46b9df250b994f242cf956a">radio_app_common_hdr::frame_id</a></div><div class="ttdeci">uint8_t frame_id</div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00176">xran_pkt.h:176</a></div></div>
78 <div class="ttc" id="structdata__section__hdr_html"><div class="ttname"><a href="structdata__section__hdr.html">data_section_hdr</a></div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt__up_8h_source.html#l00067">xran_pkt_up.h:67</a></div></div>
79 <div class="ttc" id="class_kernel_tests_html"><div class="ttname"><a href="class_kernel_tests.html">KernelTests</a></div><div class="ttdef"><b>Definition:</b> <a href="common_8hpp_source.html#l00156">common.hpp:156</a></div></div>
80 <div class="ttc" id="group__xran__common__pkt_html_gga9c60a23fdae979ad1842b255790d1558a19f3d3cee814f10e4f3bf7d80194083f"><div class="ttname"><a href="group__xran__common__pkt.html#gga9c60a23fdae979ad1842b255790d1558a19f3d3cee814f10e4f3bf7d80194083f">XRAN_DIR_DL</a></div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00149">xran_pkt.h:149</a></div></div>
81 <div class="ttc" id="class_u__plane_check_html_a3a1707f6479611fdc609a3eb8a0cef1b"><div class="ttname"><a href="class_u__plane_check.html#a3a1707f6479611fdc609a3eb8a0cef1b">U_planeCheck::SetUp</a></div><div class="ttdeci">void SetUp() override</div><div class="ttdef"><b>Definition:</b> <a href="u__plane__functional_8cc_source.html#l00037">u_plane_functional.cc:37</a></div></div>
82 <div class="ttc" id="xran__common_8c_html_adc9636576fb70f4b4fcfd1d03fe59998"><div class="ttname"><a href="xran__common_8c.html#adc9636576fb70f4b4fcfd1d03fe59998">prepare_symbol_ex</a></div><div class="ttdeci">int32_t prepare_symbol_ex(enum xran_pkt_dir direction, uint16_t section_id, struct rte_mbuf *mb, struct rb_map *data, uint8_t compMeth, uint8_t iqWidth, const enum xran_input_byte_order iq_buf_byte_order, uint8_t frame_id, uint8_t subframe_id, uint8_t slot_id, uint8_t symbol_no, int prb_start, int prb_num, uint8_t CC_ID, uint8_t RU_Port_ID, uint8_t seq_id, uint32_t do_copy)</div><div class="ttdef"><b>Definition:</b> <a href="xran__common_8c_source.html#l00348">xran_common.c:348</a></div></div>
83 <div class="ttc" id="structdata__section__hdr_html_acb00c5e7ebe809fda7288c699eed867c"><div class="ttname"><a href="structdata__section__hdr.html#acb00c5e7ebe809fda7288c699eed867c">data_section_hdr::num_prbu</a></div><div class="ttdeci">uint32_t num_prbu</div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt__up_8h_source.html#l00071">xran_pkt_up.h:71</a></div></div>
84 <div class="ttc" id="common_8hpp_html"><div class="ttname"><a href="common_8hpp.html">common.hpp</a></div></div>
85 <div class="ttc" id="ethernet_8h_html"><div class="ttname"><a href="ethernet_8h.html">ethernet.h</a></div><div class="ttdoc">This file has all definitions for the Ethernet Data Interface Layer. </div></div>
86 <div class="ttc" id="structrb__map_html"><div class="ttname"><a href="structrb__map.html">rb_map</a></div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt__up_8h_source.html#l00135">xran_pkt_up.h:135</a></div></div>
87 <div class="ttc" id="structxran__ecpri__hdr_html"><div class="ttname"><a href="structxran__ecpri__hdr.html">xran_ecpri_hdr</a></div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00130">xran_pkt.h:130</a></div></div>
88 <div class="ttc" id="class_u__plane_check_html"><div class="ttname"><a href="class_u__plane_check.html">U_planeCheck</a></div><div class="ttdef"><b>Definition:</b> <a href="u__plane__functional_8cc_source.html#l00030">u_plane_functional.cc:30</a></div></div>
89 <div class="ttc" id="xran__fh__o__du_8h_html_ab5ce6839bae2968c79930a0bfa17f4d8"><div class="ttname"><a href="xran__fh__o__du_8h.html#ab5ce6839bae2968c79930a0bfa17f4d8">xran_input_byte_order</a></div><div class="ttdeci">xran_input_byte_order</div><div class="ttdef"><b>Definition:</b> <a href="xran__fh__o__du_8h_source.html#l00471">xran_fh_o_du.h:471</a></div></div>
90 <div class="ttc" id="class_kernel_tests_html_abf28e5ea54fab2b0685972fe6e75560a"><div class="ttname"><a href="class_kernel_tests.html#abf28e5ea54fab2b0685972fe6e75560a">KernelTests::init_test</a></div><div class="ttdeci">void init_test(const std::string &type)</div><div class="ttdoc">Defines section in the conf.json that is used to load parameters from. </div><div class="ttdef"><b>Definition:</b> <a href="common_8hpp_source.html#l00358">common.hpp:358</a></div></div>
91 <div class="ttc" id="structdata__section__hdr_html_a9f9f2f87d8b5cc7e4af6ef3e2c4c8189"><div class="ttname"><a href="structdata__section__hdr.html#a9f9f2f87d8b5cc7e4af6ef3e2c4c8189">data_section_hdr::all_bits</a></div><div class="ttdeci">uint32_t all_bits</div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt__up_8h_source.html#l00069">xran_pkt_up.h:69</a></div></div>
92 <div class="ttc" id="ethernet_8c_html_a8d83e3adb6c9e839b3b7259288f100ba"><div class="ttname"><a href="ethernet_8c.html#a8d83e3adb6c9e839b3b7259288f100ba">_eth_mbuf_pool</a></div><div class="ttdeci">struct rte_mempool * _eth_mbuf_pool</div><div class="ttdef"><b>Definition:</b> <a href="ethernet_8c_source.html#l00070">ethernet.c:70</a></div></div>
93 <div class="ttc" id="xran__fh__o__du_8h_html_ab5ce6839bae2968c79930a0bfa17f4d8ae0b667dc04b0baacb15bc9c40b776098"><div class="ttname"><a href="xran__fh__o__du_8h.html#ab5ce6839bae2968c79930a0bfa17f4d8ae0b667dc04b0baacb15bc9c40b776098">XRAN_CPU_LE_BYTE_ORDER</a></div><div class="ttdef"><b>Definition:</b> <a href="xran__fh__o__du_8h_source.html#l00473">xran_fh_o_du.h:473</a></div></div>
94 <div class="ttc" id="u__plane__functional_8cc_html_a69b4bff6061152ff85770d725cced3cc"><div class="ttname"><a href="u__plane__functional_8cc.html#a69b4bff6061152ff85770d725cced3cc">module_name</a></div><div class="ttdeci">const std::string module_name</div><div class="ttdef"><b>Definition:</b> <a href="u__plane__functional_8cc_source.html#l00028">u_plane_functional.cc:28</a></div></div>
95 <div class="ttc" id="class_u__plane_check_html_a814db5f2ff5eb8cff5caf3ea1b473475"><div class="ttname"><a href="class_u__plane_check.html#a814db5f2ff5eb8cff5caf3ea1b473475">U_planeCheck::test_buffer</a></div><div class="ttdeci">struct rte_mbuf * test_buffer</div><div class="ttdef"><b>Definition:</b> <a href="u__plane__functional_8cc_source.html#l00033">u_plane_functional.cc:33</a></div></div>
96 <div class="ttc" id="structxran__ecpri__hdr_html_aa90ff3ad961fe295cdffddc945999212"><div class="ttname"><a href="structxran__ecpri__hdr.html#aa90ff3ad961fe295cdffddc945999212">xran_ecpri_hdr::cmnhdr</a></div><div class="ttdeci">struct xran_ecpri_cmn_hdr cmnhdr</div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00132">xran_pkt.h:132</a></div></div>
97 <div class="ttc" id="xran__up__api_8h_html"><div class="ttname"><a href="xran__up__api_8h.html">xran_up_api.h</a></div><div class="ttdoc">This file provides the definitions for User Plane Messages APIs. </div></div>
98 <div class="ttc" id="xran__common_8h_html"><div class="ttname"><a href="xran__common_8h.html">xran_common.h</a></div><div class="ttdoc">XRAN layer common functionality for both lls-CU and RU as well as C-plane and U-plane. </div></div>
99 <div class="ttc" id="structecpri__seq__id_html"><div class="ttname"><a href="structecpri__seq__id.html">ecpri_seq_id</a></div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00097">xran_pkt.h:97</a></div></div>
100 <div class="ttc" id="xran__fh__o__du_8h_html"><div class="ttname"><a href="xran__fh__o__du_8h.html">xran_fh_o_du.h</a></div><div class="ttdoc">This file provides public interface to xRAN Front Haul layer implementation as defined in the ORAN-WG...</div></div>
101 <div class="ttc" id="class_u__plane_check_html_aab306187cd86e6270f16af7fac1d0a63"><div class="ttname"><a href="class_u__plane_check.html#aab306187cd86e6270f16af7fac1d0a63">U_planeCheck::test_eth_mbuf_pool</a></div><div class="ttdeci">struct rte_mempool * test_eth_mbuf_pool</div><div class="ttdef"><b>Definition:</b> <a href="u__plane__functional_8cc_source.html#l00035">u_plane_functional.cc:35</a></div></div>
102 <div class="ttc" id="structdata__section__hdr_html_a11d1616fb975ccafbc33ab590fe501c4"><div class="ttname"><a href="structdata__section__hdr.html#a11d1616fb975ccafbc33ab590fe501c4">data_section_hdr::sect_id</a></div><div class="ttdeci">uint32_t sect_id</div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt__up_8h_source.html#l00075">xran_pkt_up.h:75</a></div></div>
103 <div class="ttc" id="u__plane__functional_8cc_html_aa59dece42a6c30feedc30accb71c2001"><div class="ttname"><a href="u__plane__functional_8cc.html#aa59dece42a6c30feedc30accb71c2001">INSTANTIATE_TEST_CASE_P</a></div><div class="ttdeci">INSTANTIATE_TEST_CASE_P(UnitTest, U_planeCheck, testing::ValuesIn(get_sequence(U_planeCheck::get_number_of_cases("u_plane_functional"))))</div></div>
104 <div class="ttc" id="structxran__ecpri__cmn__hdr_html_a5b41115e5686e3ff4f14c356a3aa209a"><div class="ttname"><a href="structxran__ecpri__cmn__hdr.html#a5b41115e5686e3ff4f14c356a3aa209a">xran_ecpri_cmn_hdr::ecpri_mesg_type</a></div><div class="ttdeci">uint8_t ecpri_mesg_type</div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00118">xran_pkt.h:118</a></div></div>
105 <div class="ttc" id="xran__up__api_8h_html_adfc5ea408600c8de1384be020b359d95"><div class="ttname"><a href="xran__up__api_8h.html#adfc5ea408600c8de1384be020b359d95">xran_extract_iq_samples</a></div><div class="ttdeci">int32_t xran_extract_iq_samples(struct rte_mbuf *mbuf, void **iq_data_start, uint8_t *CC_ID, uint8_t *Ant_ID, uint8_t *frame_id, uint8_t *subframe_id, uint8_t *slot_id, uint8_t *symb_id, struct ecpri_seq_id *seq_id, uint16_t *num_prbu, uint16_t *start_prbu, uint16_t *sym_inc, uint16_t *rb, uint16_t *sect_id, int8_t expect_comp, uint8_t *compMeth, uint8_t *iqWidth)</div><div class="ttdoc">Function extracts IQ samples from received mbuf packet. </div><div class="ttdef"><b>Definition:</b> <a href="xran__up__api_8c_source.html#l00327">xran_up_api.c:327</a></div></div>
106 <div class="ttc" id="structdata__section__hdr_html_a9f1bf385f4549249e191e6563acbdecb"><div class="ttname"><a href="structdata__section__hdr.html#a9f1bf385f4549249e191e6563acbdecb">data_section_hdr::fields</a></div><div class="ttdeci">union data_section_hdr::@18 fields</div></div>
107 <div class="ttc" id="group__xran__common__pkt_html_gga5f49588115e2d0a807ad613ae866384aaef46b9a1a9d9f7c3276e1e99b02ef6de"><div class="ttname"><a href="group__xran__common__pkt.html#gga5f49588115e2d0a807ad613ae866384aaef46b9a1a9d9f7c3276e1e99b02ef6de">ECPRI_IQ_DATA</a></div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00077">xran_pkt.h:77</a></div></div>
108 <div class="ttc" id="structradio__app__common__hdr_html"><div class="ttname"><a href="structradio__app__common__hdr.html">radio_app_common_hdr</a></div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00162">xran_pkt.h:162</a></div></div>
109 <div class="ttc" id="common_8cpp_html_a39bf4f7770751080f5b72046abfd01a5"><div class="ttname"><a href="common_8cpp.html#a39bf4f7770751080f5b72046abfd01a5">get_sequence</a></div><div class="ttdeci">std::vector< unsigned > get_sequence(const unsigned number)</div><div class="ttdoc">For a given number return sequence of number from 0 to number - 1. </div><div class="ttdef"><b>Definition:</b> <a href="common_8cpp_source.html#l00078">common.cpp:78</a></div></div>
110 <div class="ttc" id="structxran__ecpri__cmn__hdr_html_a61bf830b8866773b24cbca74ed3a4d6f"><div class="ttname"><a href="structxran__ecpri__cmn__hdr.html#a61bf830b8866773b24cbca74ed3a4d6f">xran_ecpri_cmn_hdr::ecpri_payl_size</a></div><div class="ttdeci">uint16_t ecpri_payl_size</div><div class="ttdef"><b>Definition:</b> <a href="xran__pkt_8h_source.html#l00119">xran_pkt.h:119</a></div></div>
111 </div><!-- fragment --></div><!-- contents -->
112 <!-- start footer part -->
113 <hr class="footer"/><address class="footer"><small>
114 Generated by  <a href="http://www.doxygen.org/index.html">
115 <img class="footer" src="doxygen.png" alt="doxygen"/>