A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
lte-pdcp.cc
Go to the documentation of this file.
1
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2011-2012 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: Manuel Requena <manuel.requena@cttc.es>
19
*/
20
21
#include "ns3/log.h"
22
#include "ns3/simulator.h"
23
24
#include "ns3/lte-pdcp.h"
25
#include "ns3/lte-pdcp-header.h"
26
#include "ns3/lte-pdcp-sap.h"
27
#include "ns3/lte-pdcp-tag.h"
28
29
NS_LOG_COMPONENT_DEFINE
(
"LtePdcp"
);
30
31
namespace
ns3 {
32
33
34
class
LtePdcpSpecificLteRlcSapUser
:
public
LteRlcSapUser
35
{
36
public
:
37
LtePdcpSpecificLteRlcSapUser
(
LtePdcp
* pdcp);
38
39
// Interface provided to lower RLC entity (implemented from LteRlcSapUser)
40
virtual
void
ReceivePdcpPdu
(
Ptr<Packet>
p);
41
42
private
:
43
LtePdcpSpecificLteRlcSapUser
();
44
LtePdcp
*
m_pdcp
;
45
};
46
47
LtePdcpSpecificLteRlcSapUser::LtePdcpSpecificLteRlcSapUser
(
LtePdcp
* pdcp)
48
: m_pdcp (pdcp)
49
{
50
}
51
52
LtePdcpSpecificLteRlcSapUser::LtePdcpSpecificLteRlcSapUser
()
53
{
54
}
55
56
void
57
LtePdcpSpecificLteRlcSapUser::ReceivePdcpPdu
(
Ptr<Packet>
p)
58
{
59
m_pdcp
->
DoReceivePdu
(p);
60
}
61
63
64
NS_OBJECT_ENSURE_REGISTERED
(
LtePdcp
);
65
66
LtePdcp::LtePdcp
()
67
: m_pdcpSapUser (0),
68
m_rlcSapProvider (0),
69
m_rnti (0),
70
m_lcid (0),
71
m_txSequenceNumber (0),
72
m_rxSequenceNumber (0)
73
{
74
NS_LOG_FUNCTION
(
this
);
75
m_pdcpSapProvider
=
new
LtePdcpSpecificLtePdcpSapProvider<LtePdcp>
(
this
);
76
m_rlcSapUser
=
new
LtePdcpSpecificLteRlcSapUser
(
this
);
77
}
78
79
LtePdcp::~LtePdcp
()
80
{
81
NS_LOG_FUNCTION
(
this
);
82
}
83
84
TypeId
85
LtePdcp::GetTypeId
(
void
)
86
{
87
static
TypeId
tid =
TypeId
(
"ns3::LtePdcp"
)
88
.
SetParent
<
Object
> ()
89
.AddTraceSource (
"TxPDU"
,
90
"PDU transmission notified to the RLC."
,
91
MakeTraceSourceAccessor
(&
LtePdcp::m_txPdu
))
92
.AddTraceSource (
"RxPDU"
,
93
"PDU received."
,
94
MakeTraceSourceAccessor
(&
LtePdcp::m_rxPdu
))
95
;
96
return
tid;
97
}
98
99
void
100
LtePdcp::DoDispose
()
101
{
102
NS_LOG_FUNCTION
(
this
);
103
delete
(
m_pdcpSapProvider
);
104
delete
(
m_rlcSapUser
);
105
}
106
107
108
void
109
LtePdcp::SetRnti
(uint16_t rnti)
110
{
111
NS_LOG_FUNCTION
(
this
<< (uint32_t) rnti);
112
m_rnti
= rnti;
113
}
114
115
void
116
LtePdcp::SetLcId
(uint8_t lcId)
117
{
118
NS_LOG_FUNCTION
(
this
<< (uint32_t) lcId);
119
m_lcid
= lcId;
120
}
121
122
void
123
LtePdcp::SetLtePdcpSapUser
(
LtePdcpSapUser
*
s
)
124
{
125
NS_LOG_FUNCTION
(
this
<< s);
126
m_pdcpSapUser
=
s
;
127
}
128
129
LtePdcpSapProvider
*
130
LtePdcp::GetLtePdcpSapProvider
()
131
{
132
NS_LOG_FUNCTION
(
this
);
133
return
m_pdcpSapProvider
;
134
}
135
136
void
137
LtePdcp::SetLteRlcSapProvider
(
LteRlcSapProvider
*
s
)
138
{
139
NS_LOG_FUNCTION
(
this
<< s);
140
m_rlcSapProvider
=
s
;
141
}
142
143
LteRlcSapUser
*
144
LtePdcp::GetLteRlcSapUser
()
145
{
146
NS_LOG_FUNCTION
(
this
);
147
return
m_rlcSapUser
;
148
}
149
150
LtePdcp::Status
151
LtePdcp::GetStatus
()
152
{
153
Status
s
;
154
s.
txSn
=
m_txSequenceNumber
;
155
s.
rxSn
=
m_rxSequenceNumber
;
156
return
s
;
157
}
158
159
void
160
LtePdcp::SetStatus
(
Status
s
)
161
{
162
m_txSequenceNumber
= s.
txSn
;
163
m_rxSequenceNumber
= s.
rxSn
;
164
}
165
167
168
void
169
LtePdcp::DoTransmitPdcpSdu
(
Ptr<Packet>
p)
170
{
171
NS_LOG_FUNCTION
(
this
<<
m_rnti
<< (uint32_t)
m_lcid
<< p->
GetSize
());
172
173
LtePdcpHeader
pdcpHeader;
174
pdcpHeader.
SetSequenceNumber
(
m_txSequenceNumber
);
175
176
m_txSequenceNumber
++;
177
if
(
m_txSequenceNumber
>
m_maxPdcpSn
)
178
{
179
m_txSequenceNumber
= 0;
180
}
181
182
pdcpHeader.SetDcBit (
LtePdcpHeader::DATA_PDU
);
183
184
NS_LOG_LOGIC
(
"PDCP header: "
<< pdcpHeader);
185
p->
AddHeader
(pdcpHeader);
186
187
// Sender timestamp
188
PdcpTag
pdcpTag (
Simulator::Now
());
189
p->
AddByteTag
(pdcpTag);
190
m_txPdu
(
m_rnti
,
m_lcid
, p->
GetSize
());
191
192
LteRlcSapProvider::TransmitPdcpPduParameters
params;
193
params.
rnti
=
m_rnti
;
194
params.lcid =
m_lcid
;
195
params.pdcpPdu = p;
196
197
m_rlcSapProvider
->
TransmitPdcpPdu
(params);
198
}
199
200
void
201
LtePdcp::DoReceivePdu
(
Ptr<Packet>
p)
202
{
203
NS_LOG_FUNCTION
(
this
<<
m_rnti
<< (uint32_t)
m_lcid
<< p->
GetSize
());
204
205
// Receiver timestamp
206
PdcpTag
pdcpTag;
207
Time
delay;
208
if
(p->
FindFirstMatchingByteTag
(pdcpTag))
209
{
210
delay =
Simulator::Now
() - pdcpTag.GetSenderTimestamp ();
211
}
212
m_rxPdu
(
m_rnti
,
m_lcid
, p->
GetSize
(), delay.
GetNanoSeconds
());
213
214
LtePdcpHeader
pdcpHeader;
215
p->
RemoveHeader
(pdcpHeader);
216
NS_LOG_LOGIC
(
"PDCP header: "
<< pdcpHeader);
217
218
m_rxSequenceNumber
= pdcpHeader.GetSequenceNumber () + 1;
219
if
(
m_rxSequenceNumber
>
m_maxPdcpSn
)
220
{
221
m_rxSequenceNumber
= 0;
222
}
223
224
LtePdcpSapUser::ReceivePdcpSduParameters
params;
225
params.
pdcpSdu
= p;
226
params.
rnti
=
m_rnti
;
227
params.
lcid
=
m_lcid
;
228
m_pdcpSapUser
->
ReceivePdcpSdu
(params);
229
}
230
231
232
}
// namespace ns3
ns3::Packet::RemoveHeader
uint32_t RemoveHeader(Header &header)
Definition:
packet.cc:268
ns3::LteRlcSapUser
Definition:
lte-rlc-sap.h:66
ns3::LtePdcp::m_rlcSapProvider
LteRlcSapProvider * m_rlcSapProvider
Definition:
lte-pdcp.h:125
ns3::Packet::FindFirstMatchingByteTag
bool FindFirstMatchingByteTag(Tag &tag) const
Definition:
packet.cc:824
ns3::Time
keep track of time values and allow control of global simulation resolution
Definition:
nstime.h:81
ns3::Ptr< Packet >
ns3::LtePdcp::m_rnti
uint16_t m_rnti
Definition:
lte-pdcp.h:127
NS_LOG_FUNCTION
#define NS_LOG_FUNCTION(parameters)
Definition:
log.h:311
ns3::LtePdcp::DoReceivePdu
virtual void DoReceivePdu(Ptr< Packet > p)
Definition:
lte-pdcp.cc:201
ns3::LtePdcp::GetLteRlcSapUser
LteRlcSapUser * GetLteRlcSapUser()
Definition:
lte-pdcp.cc:144
ns3::LtePdcp::SetLtePdcpSapUser
void SetLtePdcpSapUser(LtePdcpSapUser *s)
Definition:
lte-pdcp.cc:123
ns3::LteRlcSapProvider
Definition:
lte-rlc-sap.h:35
ns3::LtePdcp::GetTypeId
static TypeId GetTypeId(void)
Definition:
lte-pdcp.cc:85
ns3::LtePdcp::Status::txSn
uint16_t txSn
TX sequence number.
Definition:
lte-pdcp.h:97
ns3::LtePdcp::Status
Definition:
lte-pdcp.h:95
ns3::LtePdcp::m_pdcpSapProvider
LtePdcpSapProvider * m_pdcpSapProvider
Definition:
lte-pdcp.h:119
NS_LOG_COMPONENT_DEFINE
#define NS_LOG_COMPONENT_DEFINE(name)
Definition:
log.h:122
ns3::Packet::GetSize
uint32_t GetSize(void) const
Definition:
packet.h:650
ns3::LtePdcp::m_txSequenceNumber
uint16_t m_txSequenceNumber
Definition:
lte-pdcp.h:145
ns3::LtePdcp::m_rxSequenceNumber
uint16_t m_rxSequenceNumber
Definition:
lte-pdcp.h:146
ns3::LteRlcSapProvider::TransmitPdcpPdu
virtual void TransmitPdcpPdu(TransmitPdcpPduParameters params)=0
ns3::LtePdcpSapUser::ReceivePdcpSduParameters::pdcpSdu
Ptr< Packet > pdcpSdu
Definition:
lte-pdcp-sap.h:78
ns3::LtePdcp::SetStatus
void SetStatus(Status s)
Definition:
lte-pdcp.cc:160
ns3::LtePdcpSapUser::ReceivePdcpSduParameters
Definition:
lte-pdcp-sap.h:76
ns3::LtePdcpSapUser::ReceivePdcpSduParameters::rnti
uint16_t rnti
Definition:
lte-pdcp-sap.h:79
ns3::LtePdcpSpecificLteRlcSapUser::LtePdcpSpecificLteRlcSapUser
LtePdcpSpecificLteRlcSapUser()
Definition:
lte-pdcp.cc:52
ns3::LtePdcp::m_txPdu
TracedCallback< uint16_t, uint8_t, uint32_t > m_txPdu
Definition:
lte-pdcp.h:134
s
Ptr< SampleEmitter > s
Definition:
double-probe-test-suite.cc:51
ns3::LtePdcp::~LtePdcp
virtual ~LtePdcp()
Definition:
lte-pdcp.cc:79
ns3::NS_OBJECT_ENSURE_REGISTERED
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
ns3::LtePdcp::GetLtePdcpSapProvider
LtePdcpSapProvider * GetLtePdcpSapProvider()
Definition:
lte-pdcp.cc:130
ns3::PdcpTag
Definition:
lte-pdcp-tag.h:37
ns3::LtePdcp::SetLteRlcSapProvider
void SetLteRlcSapProvider(LteRlcSapProvider *s)
Definition:
lte-pdcp.cc:137
ns3::LtePdcp::Status::rxSn
uint16_t rxSn
RX sequence number.
Definition:
lte-pdcp.h:98
NS_LOG_LOGIC
#define NS_LOG_LOGIC(msg)
Definition:
log.h:334
ns3::LtePdcp::DoTransmitPdcpSdu
virtual void DoTransmitPdcpSdu(Ptr< Packet > p)
Definition:
lte-pdcp.cc:169
ns3::LtePdcp::SetLcId
void SetLcId(uint8_t lcId)
Definition:
lte-pdcp.cc:116
ns3::LtePdcp::SetRnti
void SetRnti(uint16_t rnti)
Definition:
lte-pdcp.cc:109
ns3::MakeTraceSourceAccessor
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Definition:
trace-source-accessor.h:135
ns3::LtePdcp::DoDispose
virtual void DoDispose()
Definition:
lte-pdcp.cc:100
ns3::LtePdcpHeader::DATA_PDU
Definition:
lte-pdcp-header.h:58
ns3::LtePdcp::m_rlcSapUser
LteRlcSapUser * m_rlcSapUser
Definition:
lte-pdcp.h:124
ns3::LtePdcp::LtePdcpSpecificLteRlcSapUser
friend class LtePdcpSpecificLteRlcSapUser
Definition:
lte-pdcp.h:39
ns3::LtePdcp
Definition:
lte-pdcp.h:37
ns3::Simulator::Now
static Time Now(void)
Definition:
simulator.cc:180
ns3::LtePdcpSapUser::ReceivePdcpSdu
virtual void ReceivePdcpSdu(ReceivePdcpSduParameters params)=0
ns3::LteRlcSapProvider::TransmitPdcpPduParameters
Definition:
lte-rlc-sap.h:43
ns3::LtePdcpSpecificLteRlcSapUser::m_pdcp
LtePdcp * m_pdcp
Definition:
lte-pdcp.cc:44
ns3::Time::GetNanoSeconds
int64_t GetNanoSeconds(void) const
Definition:
nstime.h:291
ns3::LtePdcp::m_lcid
uint8_t m_lcid
Definition:
lte-pdcp.h:128
ns3::LtePdcp::GetStatus
Status GetStatus()
Definition:
lte-pdcp.cc:151
ns3::LtePdcpSapProvider
Definition:
lte-pdcp-sap.h:35
ns3::LtePdcpSapUser
Definition:
lte-pdcp-sap.h:68
ns3::LtePdcpSpecificLteRlcSapUser::ReceivePdcpPdu
virtual void ReceivePdcpPdu(Ptr< Packet > p)
Definition:
lte-pdcp.cc:57
ns3::LtePdcpSapUser::ReceivePdcpSduParameters::lcid
uint8_t lcid
Definition:
lte-pdcp-sap.h:80
ns3::LtePdcpSpecificLteRlcSapUser
Definition:
lte-pdcp.cc:34
ns3::LtePdcp::m_rxPdu
TracedCallback< uint16_t, uint8_t, uint32_t, uint64_t > m_rxPdu
Definition:
lte-pdcp.h:139
ns3::LteRlcSapProvider::TransmitPdcpPduParameters::rnti
uint16_t rnti
Definition:
lte-rlc-sap.h:46
ns3::LtePdcp::m_pdcpSapUser
LtePdcpSapUser * m_pdcpSapUser
Definition:
lte-pdcp.h:118
ns3::LtePdcp::m_maxPdcpSn
static const uint16_t m_maxPdcpSn
Definition:
lte-pdcp.h:151
ns3::LtePdcpHeader
The packet header for the Packet Data Convergence Protocol (PDCP) packets.
Definition:
lte-pdcp-header.h:38
ns3::Object
a base class which provides memory management and object aggregation
Definition:
object.h:63
ns3::TypeId
a unique identifier for an interface.
Definition:
type-id.h:49
ns3::LtePdcpSpecificLtePdcpSapProvider
Definition:
lte-pdcp-sap.h:94
ns3::TypeId::SetParent
TypeId SetParent(TypeId tid)
Definition:
type-id.cc:610
ns3::LtePdcp::LtePdcp
LtePdcp()
Definition:
lte-pdcp.cc:66
ns3::Packet::AddHeader
void AddHeader(const Header &header)
Definition:
packet.cc:253
ns3::Packet::AddByteTag
void AddByteTag(const Tag &tag) const
Definition:
packet.cc:808
ns3::LtePdcpHeader::SetSequenceNumber
void SetSequenceNumber(uint16_t sequenceNumber)
Definition:
lte-pdcp-header.cc:50
src
lte
model
lte-pdcp.cc
Generated on Sat Nov 16 2013 16:17:45 for ns-3 by
1.8.5