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
epc-x2-sap.h
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 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
#ifndef EPC_X2_SAP_H
22
#define EPC_X2_SAP_H
23
24
#include "ns3/packet.h"
25
#include "ns3/eps-bearer.h"
26
#include "ns3/ipv4-address.h"
27
28
#include <bitset>
29
30
namespace
ns3 {
31
32
33
class
Node;
34
49
class
EpcX2Sap
50
{
51
public
:
52
virtual
~EpcX2Sap
();
53
59
struct
ErabToBeSetupItem
60
{
61
uint16_t
erabId
;
62
EpsBearer
erabLevelQosParameters
;
63
bool
dlForwarding
;
64
Ipv4Address
transportLayerAddress
;
65
uint32_t
gtpTeid
;
66
67
ErabToBeSetupItem
();
68
};
69
75
struct
ErabAdmittedItem
76
{
77
uint16_t
erabId
;
78
uint32_t
ulGtpTeid
;
79
uint32_t
dlGtpTeid
;
80
};
81
87
struct
ErabNotAdmittedItem
88
{
89
uint16_t
erabId
;
90
uint16_t
cause
;
91
};
92
98
static
const
uint16_t
m_maxPdcpSn
= 4096;
99
struct
ErabsSubjectToStatusTransferItem
100
{
101
uint16_t
erabId
;
102
std::bitset<m_maxPdcpSn>
receiveStatusOfUlPdcpSdus
;
103
uint16_t
ulPdcpSn
;
104
uint32_t
ulHfn
;
105
uint16_t
dlPdcpSn
;
106
uint32_t
dlHfn
;
107
};
108
114
enum
UlInterferenceOverloadIndicationItem
115
{
116
HighInterference
,
117
MediumInterference
,
118
LowInterference
119
};
120
126
struct
UlHighInterferenceInformationItem
127
{
128
uint16_t
targetCellId
;
129
std::vector <bool>
ulHighInterferenceIndicationList
;
130
};
131
140
struct
RelativeNarrowbandTxBand
141
{
142
std::vector <bool>
rntpPerPrbList
;
143
int16_t
rntpThreshold
;
144
uint16_t
antennaPorts
;
145
uint16_t
pB
;
146
uint16_t
pdcchInterferenceImpact
;
147
};
148
154
struct
CellInformationItem
155
{
156
uint16_t
sourceCellId
;
157
std::vector <UlInterferenceOverloadIndicationItem>
ulInterferenceOverloadIndicationList
;
158
std::vector <UlHighInterferenceInformationItem>
ulHighInterferenceInformationList
;
159
RelativeNarrowbandTxBand
relativeNarrowbandTxBand
;
160
};
161
167
enum
LoadIndicator
168
{
169
LowLoad
,
170
MediumLoad
,
171
HighLoad
,
172
Overload
173
};
174
180
struct
CompositeAvailCapacity
181
{
182
uint16_t
cellCapacityClassValue
;
183
uint16_t
capacityValue
;
184
};
185
191
struct
CellMeasurementResultItem
192
{
193
uint16_t
sourceCellId
;
194
195
LoadIndicator
dlHardwareLoadIndicator
;
196
LoadIndicator
ulHardwareLoadIndicator
;
197
198
LoadIndicator
dlS1TnlLoadIndicator
;
199
LoadIndicator
ulS1TnlLoadIndicator
;
200
201
uint16_t
dlGbrPrbUsage
;
202
uint16_t
ulGbrPrbUsage
;
203
uint16_t
dlNonGbrPrbUsage
;
204
uint16_t
ulNonGbrPrbUsage
;
205
uint16_t
dlTotalPrbUsage
;
206
uint16_t
ulTotalPrbUsage
;
207
208
CompositeAvailCapacity
dlCompositeAvailableCapacity
;
209
CompositeAvailCapacity
ulCompositeAvailableCapacity
;
210
};
211
212
213
enum
IdCause
214
{
215
HandoverDesirableForRadioReason
,
216
TimeCriticalHandover
217
};
218
219
225
struct
HandoverRequestParams
226
{
227
uint16_t
oldEnbUeX2apId
;
228
uint16_t
cause
;
229
uint16_t
sourceCellId
;
230
uint16_t
targetCellId
;
231
uint32_t
mmeUeS1apId
;
232
uint64_t
ueAggregateMaxBitRateDownlink
;
233
uint64_t
ueAggregateMaxBitRateUplink
;
234
std::vector <ErabToBeSetupItem>
bearers
;
235
Ptr<Packet>
rrcContext
;
236
};
237
243
struct
HandoverRequestAckParams
244
{
245
uint16_t
oldEnbUeX2apId
;
246
uint16_t
newEnbUeX2apId
;
247
uint16_t
sourceCellId
;
248
uint16_t
targetCellId
;
249
std::vector <ErabAdmittedItem>
admittedBearers
;
250
std::vector <ErabNotAdmittedItem>
notAdmittedBearers
;
251
Ptr<Packet>
rrcContext
;
252
};
253
259
struct
HandoverPreparationFailureParams
260
{
261
uint16_t
oldEnbUeX2apId
;
262
uint16_t
sourceCellId
;
263
uint16_t
targetCellId
;
264
uint16_t
cause
;
265
uint16_t
criticalityDiagnostics
;
266
};
267
273
struct
SnStatusTransferParams
274
{
275
uint16_t
oldEnbUeX2apId
;
276
uint16_t
newEnbUeX2apId
;
277
uint16_t
sourceCellId
;
278
uint16_t
targetCellId
;
279
std::vector <ErabsSubjectToStatusTransferItem>
erabsSubjectToStatusTransferList
;
280
};
281
287
struct
UeContextReleaseParams
288
{
289
uint16_t
oldEnbUeX2apId
;
290
uint16_t
newEnbUeX2apId
;
291
uint16_t
sourceCellId
;
292
uint16_t
targetCellId
;
293
};
294
300
struct
LoadInformationParams
301
{
302
uint16_t
targetCellId
;
303
std::vector <CellInformationItem>
cellInformationList
;
304
};
305
311
struct
ResourceStatusUpdateParams
312
{
313
uint16_t
targetCellId
;
314
uint16_t
enb1MeasurementId
;
315
uint16_t
enb2MeasurementId
;
316
std::vector <CellMeasurementResultItem>
cellMeasurementResultList
;
317
};
318
325
struct
UeDataParams
326
{
327
uint16_t
sourceCellId
;
328
uint16_t
targetCellId
;
329
uint32_t
gtpTeid
;
330
Ptr<Packet>
ueData
;
331
};
332
333
};
334
335
340
class
EpcX2SapProvider
:
public
EpcX2Sap
341
{
342
public
:
343
virtual
~EpcX2SapProvider
();
344
349
virtual
void
SendHandoverRequest
(
HandoverRequestParams
params) = 0;
350
351
virtual
void
SendHandoverRequestAck
(
HandoverRequestAckParams
params) = 0;
352
353
virtual
void
SendHandoverPreparationFailure
(
HandoverPreparationFailureParams
params) = 0;
354
355
virtual
void
SendSnStatusTransfer
(
SnStatusTransferParams
params) = 0;
356
357
virtual
void
SendUeContextRelease
(
UeContextReleaseParams
params) = 0;
358
359
virtual
void
SendLoadInformation
(
LoadInformationParams
params) = 0;
360
361
virtual
void
SendResourceStatusUpdate
(
ResourceStatusUpdateParams
params) = 0;
362
363
virtual
void
SendUeData
(
UeDataParams
params) = 0;
364
};
365
366
371
class
EpcX2SapUser
:
public
EpcX2Sap
372
{
373
public
:
374
virtual
~EpcX2SapUser
();
375
380
virtual
void
RecvHandoverRequest
(
HandoverRequestParams
params) = 0;
381
382
virtual
void
RecvHandoverRequestAck
(
HandoverRequestAckParams
params) = 0;
383
384
virtual
void
RecvHandoverPreparationFailure
(
HandoverPreparationFailureParams
params) = 0;
385
386
virtual
void
RecvSnStatusTransfer
(
SnStatusTransferParams
params) = 0;
387
388
virtual
void
RecvUeContextRelease
(
UeContextReleaseParams
params) = 0;
389
390
virtual
void
RecvLoadInformation
(
LoadInformationParams
params) = 0;
391
392
virtual
void
RecvResourceStatusUpdate
(
ResourceStatusUpdateParams
params) = 0;
393
394
virtual
void
RecvUeData
(
UeDataParams
params) = 0;
395
};
396
398
399
template
<
class
C>
400
class
EpcX2SpecificEpcX2SapProvider
:
public
EpcX2SapProvider
401
{
402
public
:
403
EpcX2SpecificEpcX2SapProvider
(C* x2);
404
405
//
406
// Interface implemented from EpcX2SapProvider
407
//
408
409
virtual
void
SendHandoverRequest
(
HandoverRequestParams
params);
410
411
virtual
void
SendHandoverRequestAck
(
HandoverRequestAckParams
params);
412
413
virtual
void
SendHandoverPreparationFailure
(
HandoverPreparationFailureParams
params);
414
415
virtual
void
SendSnStatusTransfer
(
SnStatusTransferParams
params);
416
417
virtual
void
SendUeContextRelease
(
UeContextReleaseParams
params);
418
419
virtual
void
SendLoadInformation
(
LoadInformationParams
params);
420
421
virtual
void
SendResourceStatusUpdate
(
ResourceStatusUpdateParams
params);
422
423
virtual
void
SendUeData
(
UeDataParams
params);
424
425
private
:
426
EpcX2SpecificEpcX2SapProvider
();
427
C*
m_x2
;
428
};
429
430
template
<
class
C>
431
EpcX2SpecificEpcX2SapProvider<C>::EpcX2SpecificEpcX2SapProvider
(C* x2)
432
: m_x2 (x2)
433
{
434
}
435
436
template
<
class
C>
437
EpcX2SpecificEpcX2SapProvider<C>::EpcX2SpecificEpcX2SapProvider
()
438
{
439
}
440
441
template
<
class
C>
442
void
443
EpcX2SpecificEpcX2SapProvider<C>::SendHandoverRequest
(
HandoverRequestParams
params)
444
{
445
m_x2->DoSendHandoverRequest (params);
446
}
447
448
template
<
class
C>
449
void
450
EpcX2SpecificEpcX2SapProvider<C>::SendHandoverRequestAck
(
HandoverRequestAckParams
params)
451
{
452
m_x2->DoSendHandoverRequestAck (params);
453
}
454
455
template
<
class
C>
456
void
457
EpcX2SpecificEpcX2SapProvider<C>::SendHandoverPreparationFailure
(
HandoverPreparationFailureParams
params)
458
{
459
m_x2->DoSendHandoverPreparationFailure (params);
460
}
461
462
template
<
class
C>
463
void
464
EpcX2SpecificEpcX2SapProvider<C>::SendSnStatusTransfer
(
SnStatusTransferParams
params)
465
{
466
m_x2->DoSendSnStatusTransfer (params);
467
}
468
469
template
<
class
C>
470
void
471
EpcX2SpecificEpcX2SapProvider<C>::SendUeContextRelease
(
UeContextReleaseParams
params)
472
{
473
m_x2->DoSendUeContextRelease (params);
474
}
475
476
template
<
class
C>
477
void
478
EpcX2SpecificEpcX2SapProvider<C>::SendLoadInformation
(
LoadInformationParams
params)
479
{
480
m_x2->DoSendLoadInformation (params);
481
}
482
483
template
<
class
C>
484
void
485
EpcX2SpecificEpcX2SapProvider<C>::SendResourceStatusUpdate
(
ResourceStatusUpdateParams
params)
486
{
487
m_x2->DoSendResourceStatusUpdate (params);
488
}
489
490
template
<
class
C>
491
void
492
EpcX2SpecificEpcX2SapProvider<C>::SendUeData
(
UeDataParams
params)
493
{
494
m_x2->DoSendUeData (params);
495
}
496
498
499
template
<
class
C>
500
class
EpcX2SpecificEpcX2SapUser
:
public
EpcX2SapUser
501
{
502
public
:
503
EpcX2SpecificEpcX2SapUser
(C* rrc);
504
505
//
506
// Interface implemented from EpcX2SapUser
507
//
508
509
virtual
void
RecvHandoverRequest
(
HandoverRequestParams
params);
510
511
virtual
void
RecvHandoverRequestAck
(
HandoverRequestAckParams
params);
512
513
virtual
void
RecvHandoverPreparationFailure
(
HandoverPreparationFailureParams
params);
514
515
virtual
void
RecvSnStatusTransfer
(
SnStatusTransferParams
params);
516
517
virtual
void
RecvUeContextRelease
(
UeContextReleaseParams
params);
518
519
virtual
void
RecvLoadInformation
(
LoadInformationParams
params);
520
521
virtual
void
RecvResourceStatusUpdate
(
ResourceStatusUpdateParams
params);
522
523
virtual
void
RecvUeData
(
UeDataParams
params);
524
525
private
:
526
EpcX2SpecificEpcX2SapUser
();
527
C*
m_rrc
;
528
};
529
530
template
<
class
C>
531
EpcX2SpecificEpcX2SapUser<C>::EpcX2SpecificEpcX2SapUser
(C* rrc)
532
: m_rrc (rrc)
533
{
534
}
535
536
template
<
class
C>
537
EpcX2SpecificEpcX2SapUser<C>::EpcX2SpecificEpcX2SapUser
()
538
{
539
}
540
541
template
<
class
C>
542
void
543
EpcX2SpecificEpcX2SapUser<C>::RecvHandoverRequest
(
HandoverRequestParams
params)
544
{
545
m_rrc->DoRecvHandoverRequest (params);
546
}
547
548
template
<
class
C>
549
void
550
EpcX2SpecificEpcX2SapUser<C>::RecvHandoverRequestAck
(
HandoverRequestAckParams
params)
551
{
552
m_rrc->DoRecvHandoverRequestAck (params);
553
}
554
555
template
<
class
C>
556
void
557
EpcX2SpecificEpcX2SapUser<C>::RecvHandoverPreparationFailure
(
HandoverPreparationFailureParams
params)
558
{
559
m_rrc->DoRecvHandoverPreparationFailure (params);
560
}
561
562
template
<
class
C>
563
void
564
EpcX2SpecificEpcX2SapUser<C>::RecvSnStatusTransfer
(
SnStatusTransferParams
params)
565
{
566
m_rrc->DoRecvSnStatusTransfer (params);
567
}
568
569
template
<
class
C>
570
void
571
EpcX2SpecificEpcX2SapUser<C>::RecvUeContextRelease
(
UeContextReleaseParams
params)
572
{
573
m_rrc->DoRecvUeContextRelease (params);
574
}
575
576
template
<
class
C>
577
void
578
EpcX2SpecificEpcX2SapUser<C>::RecvLoadInformation
(
LoadInformationParams
params)
579
{
580
m_rrc->DoRecvLoadInformation (params);
581
}
582
583
template
<
class
C>
584
void
585
EpcX2SpecificEpcX2SapUser<C>::RecvResourceStatusUpdate
(
ResourceStatusUpdateParams
params)
586
{
587
m_rrc->DoRecvResourceStatusUpdate (params);
588
}
589
590
template
<
class
C>
591
void
592
EpcX2SpecificEpcX2SapUser<C>::RecvUeData
(
UeDataParams
params)
593
{
594
m_rrc->DoRecvUeData (params);
595
}
596
597
}
// namespace ns3
598
599
#endif // EPC_X2_SAP_H
src
lte
model
epc-x2-sap.h
Generated on Tue May 14 2013 11:08:24 for ns-3 by
1.8.1.2