A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
epc-x2-sap.h
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 
60  {
61  uint16_t erabId;
62  EpsBearer erabLevelQosParameters;
63  bool dlForwarding;
64  Ipv4Address transportLayerAddress;
65  uint32_t gtpTeid;
66 
68  };
69 
76  {
77  uint16_t erabId;
78  uint32_t ulGtpTeid;
79  uint32_t dlGtpTeid;
80  };
81 
88  {
89  uint16_t erabId;
90  uint16_t cause;
91  };
92 
98  static const uint16_t m_maxPdcpSn = 4096;
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 
115  {
116  HighInterference,
117  MediumInterference,
118  LowInterference
119  };
120 
127  {
128  uint16_t targetCellId;
129  std::vector <bool> ulHighInterferenceIndicationList;
130  };
131 
141  {
142  std::vector <bool> rntpPerPrbList;
143  int16_t rntpThreshold;
144  uint16_t antennaPorts;
145  uint16_t pB;
146  uint16_t pdcchInterferenceImpact;
147  };
148 
155  {
156  uint16_t sourceCellId;
157  std::vector <UlInterferenceOverloadIndicationItem> ulInterferenceOverloadIndicationList;
158  std::vector <UlHighInterferenceInformationItem> ulHighInterferenceInformationList;
159  RelativeNarrowbandTxBand relativeNarrowbandTxBand;
160  };
161 
168  {
169  LowLoad,
170  MediumLoad,
171  HighLoad,
172  Overload
173  };
174 
181  {
182  uint16_t cellCapacityClassValue;
183  uint16_t capacityValue;
184  };
185 
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 
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 
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 
260  {
261  uint16_t oldEnbUeX2apId;
262  uint16_t sourceCellId;
263  uint16_t targetCellId;
264  uint16_t cause;
265  uint16_t criticalityDiagnostics;
266  };
267 
274  {
275  uint16_t oldEnbUeX2apId;
276  uint16_t newEnbUeX2apId;
277  uint16_t sourceCellId;
278  uint16_t targetCellId;
279  std::vector <ErabsSubjectToStatusTransferItem> erabsSubjectToStatusTransferList;
280  };
281 
288  {
289  uint16_t oldEnbUeX2apId;
290  uint16_t newEnbUeX2apId;
291  uint16_t sourceCellId;
292  uint16_t targetCellId;
293  };
294 
301  {
302  uint16_t targetCellId;
303  std::vector <CellInformationItem> cellInformationList;
304  };
305 
312  {
313  uint16_t targetCellId;
314  uint16_t enb1MeasurementId;
315  uint16_t enb2MeasurementId;
316  std::vector <CellMeasurementResultItem> cellMeasurementResultList;
317  };
318 
326  {
327  uint16_t sourceCellId;
328  uint16_t targetCellId;
329  uint32_t gtpTeid;
330  Ptr<Packet> ueData;
331  };
332 
333 };
334 
335 
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>
401 {
402 public:
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:
427  C* m_x2;
428 };
429 
430 template <class C>
432  : m_x2 (x2)
433 {
434 }
435 
436 template <class C>
437 EpcX2SpecificEpcX2SapProvider<C>::EpcX2SpecificEpcX2SapProvider ()
438 {
439 }
440 
441 template <class C>
442 void
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>
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:
527  C* m_rrc;
528 };
529 
530 template <class C>
532  : m_rrc (rrc)
533 {
534 }
535 
536 template <class C>
537 EpcX2SpecificEpcX2SapUser<C>::EpcX2SpecificEpcX2SapUser ()
538 {
539 }
540 
541 template <class C>
542 void
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
Parameters of the HANDOVER REQUEST message.
Definition: epc-x2-sap.h:225
virtual void RecvHandoverRequest(HandoverRequestParams params)=0
virtual void SendHandoverRequest(HandoverRequestParams params)=0
virtual void RecvHandoverRequest(HandoverRequestParams params)
Definition: epc-x2-sap.h:543
virtual void SendHandoverRequest(HandoverRequestParams params)
Definition: epc-x2-sap.h:443
UlInterferenceOverloadIndicationItem
Definition: epc-x2-sap.h:114
Parameters of the HANDOVER PREPARATION FAILURE message.
Definition: epc-x2-sap.h:259
static const uint16_t m_maxPdcpSn
Definition: epc-x2-sap.h:98
Parameters of the SN STATUS TRANSFER message.
Definition: epc-x2-sap.h:273
Parameters of the RESOURCE STATUS UPDATE message.
Definition: epc-x2-sap.h:311
Parameters of the UE CONTEXT RELEASE message.
Definition: epc-x2-sap.h:287
Parameters of the HANDOVER REQUEST ACKNOWLEDGE message.
Definition: epc-x2-sap.h:243
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:38
Parameters of the LOAD INFORMATION message.
Definition: epc-x2-sap.h:300
Common structures for EpcX2SapProvider and EpcX2SapUser.
Definition: epc-x2-sap.h:49
Parameters of the UE DATA primitive.
Definition: epc-x2-sap.h:325