rlc_um_dar.h 10 KB
Newer Older
1
/*******************************************************************************
gauthier's avatar
gauthier committed
2
3
    OpenAirInterface
    Copyright(c) 1999 - 2014 Eurecom
4

gauthier's avatar
gauthier committed
5
6
7
8
    OpenAirInterface is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
9
10


gauthier's avatar
gauthier committed
11
12
13
14
    OpenAirInterface is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
15

gauthier's avatar
gauthier committed
16
17
18
19
    You should have received a copy of the GNU General Public License
    along with OpenAirInterface.The full GNU General Public License is
   included in this distribution in the file called "COPYING". If not,
   see <http://www.gnu.org/licenses/>.
20

gauthier's avatar
gauthier committed
21
22
23
24
25
  Contact Information
  OpenAirInterface Admin: openair_admin@eurecom.fr
  OpenAirInterface Tech : openair_tech@eurecom.fr
  OpenAirInterface Dev  : openair4g-devel@eurecom.fr

ghaddab's avatar
ghaddab committed
26
  Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
gauthier's avatar
gauthier committed
27
28

 *******************************************************************************/
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*! \file rlc_um_dar.h
* \brief This file defines the prototypes of the functions dealing with the reassembly buffer.
* \author GAUTHIER Lionel
* \date 2010-2011
* \version
* \note
* \bug
* \warning
*/
/** @defgroup _rlc_um_receiver_impl_ RLC UM Receiver Implementation
* @ingroup _rlc_um_impl_
* @{
*/
#    ifndef __RLC_UM_DAR_H__
#        define __RLC_UM_DAR_H__
//-----------------------------------------------------------------------------
#        include "rlc_um_entity.h"
#        include "rlc_um_structs.h"
#        include "rlc_um_constants.h"
#        include "list.h"
//-----------------------------------------------------------------------------
#        ifdef RLC_UM_DAR_C
#            define private_rlc_um_dar(x)    x
#            define protected_rlc_um_dar(x)  x
#            define public_rlc_um_dar(x)     x
#        else
#            ifdef RLC_UM_MODULE
#                define private_rlc_um_dar(x)
#                define protected_rlc_um_dar(x)  extern x
#                define public_rlc_um_dar(x)     extern x
#            else
#                define private_rlc_um_dar(x)
#                define protected_rlc_um_dar(x)
#                define public_rlc_um_dar(x)     extern x
#            endif
#        endif
gauthier's avatar
gauthier committed
65
/*! \fn signed int rlc_um_get_pdu_infos(frame_t frameP,rlc_um_pdu_sn_10_t* header_pP, int16_t total_sizeP, rlc_um_pdu_info_t* pdu_info_pP, uint8_t sn_lengthP)
66
* \brief    Extract PDU informations (header fields, data size, etc) from the serialized PDU.
gauthier's avatar
gauthier committed
67
68
69
70
71
* \param[in]  frameP             Frame index.
* \param[in]  header_pP          RLC UM header PDU pointer.
* \param[in]  total_sizeP        Size of RLC UM PDU.
* \param[in]  pdu_info_pP        Structure containing extracted informations from PDU.
* \param[in]  sn_lengthP         Sequence number length in bits in PDU header (5 or 10).
72
73
* \return     0 if no error was encountered during the parsing of the PDU, else -1;
*/
74
75
76
77
78
79
protected_rlc_um_dar(  signed int rlc_um_get_pdu_infos(
    const frame_t               frameP,
    rlc_um_pdu_sn_10_t  * const header_pP,
    const sdu_size_t            total_sizeP,
    rlc_um_pdu_info_t   * const pdu_info_pP,
    const uint8_t               sn_lengthP));
80

gauthier's avatar
gauthier committed
81
/*! \fn int rlc_um_read_length_indicators(unsigned char**data_ppP, rlc_um_e_li_t* e_li_pP, unsigned int* li_array_pP, unsigned int *num_li_pP, sdu_size_t *data_size_pP)
82
* \brief    Reset protocol variables and state variables to initial values.
gauthier's avatar
gauthier committed
83
84
85
86
87
* \param[in,out]  data_ppP       Pointer on data payload.
* \param[in]      e_li_pP        Pointer on first LI + e bit in PDU.
* \param[in,out]  li_array_pP    Array containing read LI.
* \param[in,out]  num_li_pP      Pointer on number of LI read.
* \param[in,out]  data_size_pP   Pointer on data size.
88
89
* \return     0 if no error was encountered during the parsing of the PDU, else -1;
*/
gauthier's avatar
gauthier committed
90
private_rlc_um_dar(  int rlc_um_read_length_indicators(unsigned char**data_ppP, rlc_um_e_li_t* e_li_pP, unsigned int* li_array_pP, unsigned int *num_li_pP, sdu_size_t *data_size_pP));
91

gauthier's avatar
gauthier committed
92
/*! \fn void rlc_um_try_reassembly      (rlc_um_entity_t *rlc_pP, frame_t frameP, eNB_flag_t eNB_flagP, rlc_sn_t start_snP, rlc_sn_t end_snP)
93
* \brief    Try reassembly PDUs from DAR buffer, starting at sequence number snP.
gauthier's avatar
gauthier committed
94
95
96
* \param[in]  rlc_pP      RLC UM protocol instance pointer.
* \param[in]  frameP      Frame index.
* \param[in]  eNB_flagP   Flag to indicate eNB (1) or UE (0).
97
98
99
* \param[in]  start_snP   First PDU to be reassemblied if possible.
* \param[in]  end_snP     Last excluded highest sequence number of PDU to be reassemblied.
*/
gauthier's avatar
gauthier committed
100
private_rlc_um_dar(  void rlc_um_try_reassembly      (rlc_um_entity_t *rlc_pP, frame_t frameP, eNB_flag_t eNB_flagP, rlc_sn_t start_snP, rlc_sn_t end_snP));
101

gauthier's avatar
gauthier committed
102
/*! \fn void rlc_um_check_timer_reordering(rlc_um_entity_t *rlc_pP,frame_t frameP)
103
* \brief      Check if timer reordering has timed-out, if so it is stopped and has the status "timed-out".
gauthier's avatar
gauthier committed
104
105
* \param[in]  rlc_pP            RLC UM protocol instance pointer.
* \param[in]  frameP            Frame index
106
*/
gauthier's avatar
gauthier committed
107
protected_rlc_um_dar(void rlc_um_check_timer_reordering(rlc_um_entity_t  *rlc_pP,frame_t frameP));
108

gauthier's avatar
gauthier committed
109
/*! \fn void rlc_um_stop_and_reset_timer_reordering(rlc_um_entity_t *rlc_pP,frame_t frameP)
110
* \brief      Stop and reset the timer reordering.
gauthier's avatar
gauthier committed
111
112
* \param[in]  rlc_pP            RLC UM protocol instance pointer.
* \param[in]  frameP            Frame index.
113
*/
gauthier's avatar
gauthier committed
114
protected_rlc_um_dar(void rlc_um_stop_and_reset_timer_reordering(rlc_um_entity_t *rlc_pP,frame_t frameP);)
115

gauthier's avatar
gauthier committed
116
/*! \fn void rlc_um_start_timer_reordering(rlc_um_entity_t *rlc_pP,frame_t frameP)
117
* \brief      Re-arm (based on RLC UM config parameter) and start timer reordering.
gauthier's avatar
gauthier committed
118
119
* \param[in]  rlc_pP            RLC UM protocol instance pointer.
* \param[in]  frameP            Frame index.
120
*/
gauthier's avatar
gauthier committed
121
protected_rlc_um_dar(void rlc_um_start_timer_reordering(rlc_um_entity_t *rlc_pP,frame_t frameP);)
122

gauthier's avatar
gauthier committed
123
/*! \fn void rlc_um_init_timer_reordering(rlc_um_entity_t *rlc_pP, uint32_t time_outP)
124
* \brief      Initialize the timer reordering with RLC UM time-out config parameter.
gauthier's avatar
gauthier committed
125
126
* \param[in]  rlc_pP            RLC UM protocol instance pointer.
* \param[in]  time_outP         Time-out in frameP units.
127
*/
gauthier's avatar
gauthier committed
128
protected_rlc_um_dar(void rlc_um_init_timer_reordering(rlc_um_entity_t *rlc_pP, uint32_t time_outP);)
129

gauthier's avatar
gauthier committed
130
/*! \fn void rlc_um_check_timer_dar_time_out(rlc_um_entity_t *rlc_pP,frame_t frameP,eNB_flag_t eNB_flagP)
131
* \brief    Check if t-Reordering expires and take the appropriate actions as described in 3GPP specifications.
gauthier's avatar
gauthier committed
132
133
134
* \param[in]  rlc_pP       RLC UM protocol instance pointer.
* \param[in]  frameP       Frame index.
* \param[in]  eNB_flagP    Flag to indicate eNB(1) or UE (1)
135
*/
gauthier's avatar
gauthier committed
136
protected_rlc_um_dar(  void rlc_um_check_timer_dar_time_out(rlc_um_entity_t *rlc_pP,frame_t frameP,eNB_flag_t eNB_flagP));
137

gauthier's avatar
gauthier committed
138
/*! \fn mem_block_t *rlc_um_remove_pdu_from_dar_buffer(rlc_um_entity_t *rlc_pP, uint16_t snP)
139
* \brief    Remove the PDU with sequence number snP from the DAR buffer and return it.
gauthier's avatar
gauthier committed
140
141
* \param[in]  rlc_pP        RLC UM protocol instance pointer.
* \param[in]  snP           Sequence number.
142
143
* \return     The PDU stored in the DAR buffer having sequence number snP, else return NULL.
*/
gauthier's avatar
gauthier committed
144
private_rlc_um_dar(  mem_block_t *rlc_um_remove_pdu_from_dar_buffer(rlc_um_entity_t *rlc_pP, uint16_t snP));
145

gauthier's avatar
gauthier committed
146
/*! \fn mem_block_t *rlc_um_remove_pdu_from_dar_buffer(rlc_um_entity_t *rlc_pP, uint16_t snP)
147
* \brief    Get the PDU with sequence number snP from the DAR buffer.
gauthier's avatar
gauthier committed
148
149
* \param[in]  rlc_pP        RLC UM protocol instance pointer.
* \param[in]  snP           Sequence number.
150
151
* \return     The PDU stored in the DAR buffer having sequence number snP, else return NULL.
*/
gauthier's avatar
gauthier committed
152
protected_rlc_um_dar(  inline mem_block_t* rlc_um_get_pdu_from_dar_buffer(rlc_um_entity_t *rlc_pP, uint16_t snP));
153

gauthier's avatar
gauthier committed
154
/*! \fn signed int rlc_um_in_window(rlc_um_entity_t *rlc_pP, frame_t frameP, rlc_sn_t lower_boundP, rlc_sn_t snP, rlc_sn_t higher_boundP)
155
* \brief    Compute if the sequence number of a PDU is in a window .
gauthier's avatar
gauthier committed
156
157
* \param[in]  rlc_pP         RLC UM protocol instance pointer.
* \param[in]  frameP         Frame index.
158
159
160
161
162
* \param[in]  lower_boundP   Lower bound of a window.
* \param[in]  snP            Sequence number of a theorical PDU.
* \param[in]  higher_boundP  Higher bound of a window.
* \return     -2 if lower_boundP  > sn, -1 if higher_boundP < sn, 0 if lower_boundP  < sn < higher_boundP, 1 if lower_boundP  == sn, 2 if higher_boundP == sn, 3 if higher_boundP == sn == lower_boundP.
*/
gauthier's avatar
gauthier committed
163
protected_rlc_um_dar(inline signed int rlc_um_in_window(rlc_um_entity_t *rlc_pP, frame_t frameP, rlc_sn_t lower_boundP, rlc_sn_t snP, rlc_sn_t higher_boundP));
164

gauthier's avatar
gauthier committed
165
/*! \fn signed int rlc_um_in_reordering_window(rlc_um_entity_t *rlc_pP, frame_t frameP, rlc_sn_t snP)
166
* \brief    Compute if the sequence number of a PDU is in a window .
gauthier's avatar
gauthier committed
167
168
* \param[in]  rlc_pP         RLC UM protocol instance pointer.
* \param[in]  frameP         Frame index.
169
170
171
* \param[in]  snP            Sequence number of a theorical PDU.
* \return     0 if snP is in reordering window, else -1.
*/
gauthier's avatar
gauthier committed
172
protected_rlc_um_dar(inline signed int rlc_um_in_reordering_window(rlc_um_entity_t *rlc_pP, frame_t frameP, rlc_sn_t snP));
173

gauthier's avatar
gauthier committed
174
/*! \fn void rlc_um_receive_process_dar (rlc_um_entity_t *rlc_pP, frame_t frameP, eNB_flag_t eNB_flagP, mem_block_t *pdu_mem_pP,rlc_um_pdu_sn_10_t *pdu_pP, sdu_size_t tb_sizeP)
175
* \brief    Apply the DAR process for a PDU: put it in DAR buffer and try to reassembly or discard it.
gauthier's avatar
gauthier committed
176
177
178
179
180
* \param[in]  rlc_pP     RLC UM protocol instance pointer.
* \param[in]  frameP     Frame index.
* \param[in]  eNB_flagP  Flag to indicated eNB (1) or UE (0).
* \param[in]  pdu_mem_pP mem_block_t wrapper for a UM PDU .
* \param[in]  pdu_pP     Pointer on the header of the UM PDU.
181
182
* \param[in]  tb_sizeP   Size of the UM PDU.
*/
gauthier's avatar
gauthier committed
183
protected_rlc_um_dar(void rlc_um_receive_process_dar (rlc_um_entity_t *rlc_pP, frame_t frameP, eNB_flag_t eNB_flagP, mem_block_t *pdu_mem_pP,rlc_um_pdu_sn_10_t *pdu_pP, sdu_size_t tb_sizeP));
184
185
/** @} */
#    endif