A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
lte-rlc.h
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Nicola Baldo <nbaldo@cttc.es>
19  */
20 
21 #ifndef LTE_RLC_H
22 #define LTE_RLC_H
23 
24 #include <ns3/simple-ref-count.h>
25 #include <ns3/packet.h>
26 #include "ns3/uinteger.h"
27 #include "ns3/traced-value.h"
28 #include "ns3/trace-source-accessor.h"
29 #include "ns3/nstime.h"
30 
31 #include "ns3/object.h"
32 
33 #include "ns3/lte-rlc-sap.h"
34 #include "ns3/lte-mac-sap.h"
35 
36 namespace ns3 {
37 
38 
39 // class LteRlcSapProvider;
40 // class LteRlcSapUser;
41 //
42 // class LteMacSapProvider;
43 // class LteMacSapUser;
44 
50 class LteRlc : public Object // SimpleRefCount<LteRlc>
51 {
54 public:
55  LteRlc ();
56  virtual ~LteRlc ();
57  static TypeId GetTypeId (void);
58 
64  void SetRnti (uint16_t rnti);
65 
71  void SetLcId (uint8_t lcId);
72 
79 
86 
93 
100 
101 
102 
103  // TODO MRE What is the sense to duplicate all the interfaces here???
104  // NB to avoid the use of multiple inheritance
105 
106 protected:
107  // Interface forwarded by LteRlcSapProvider
108  virtual void DoTransmitPdcpPdu (Ptr<Packet> p) = 0;
109 
112 
113  // Interface forwarded by LteMacSapUser
114  virtual void DoNotifyTxOpportunity (uint32_t bytes, uint8_t layer) = 0;
115  virtual void DoNotifyHarqDeliveryFailure () = 0;
116  virtual void DoReceivePdu (Ptr<Packet> p) = 0;
117 
120 
121  uint16_t m_rnti;
122  uint8_t m_lcid;
123 
132 
133 };
134 
135 
136 
145 class LteRlcSm : public LteRlc
146 {
147 public:
148  LteRlcSm ();
149  virtual ~LteRlcSm ();
150  static TypeId GetTypeId (void);
151 
152  virtual void DoTransmitPdcpPdu (Ptr<Packet> p);
153  virtual void DoNotifyTxOpportunity (uint32_t bytes, uint8_t layer);
154  virtual void DoNotifyHarqDeliveryFailure ();
155  virtual void DoReceivePdu (Ptr<Packet> p);
156 
157  void Start ();
158 
159 private:
160  void ReportBufferStatus ();
161 
162 };
163 
164 
165 
166 
167 // /**
168 // * Implements LTE_RLC Transparent Mode (TM), see 3GPP TS 36.322
169 // *
170 // */
171 // class LteRlcTm : public LteRlc
172 // {
173 // public:
174 // virtual ~LteRlcTm ();
175 
176 // };
177 
178 
179 // /**
180 // * Implements LTE_RLC Unacknowledged Mode (UM), see 3GPP TS 36.322
181 // *
182 // */
183 // class LteRlcUm : public LteRlc
184 // {
185 // public:
186 // virtual ~LteRlcUm ();
187 
188 // };
189 
190 // /**
191 // * Implements LTE_RLC Acknowledged Mode (AM), see 3GPP TS 36.322
192 // *
193 // */
194 
195 // class LteRlcAm : public LteRlc
196 // {
197 // public:
198 // virtual ~LteRlcAm ();
199 // };
200 
201 
202 
203 
204 
205 } // namespace ns3
206 
207 #endif // LTE_RLC_H