A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
lte-rrc-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  * Authors: Nicola Baldo <nbaldo@cttc.es>
19  * Lluis Parcerisa <lparcerisa@cttc.cat>
20  */
21 
22 
23 #ifndef LTE_RRC_SAP_H
24 #define LTE_RRC_SAP_H
25 
26 #include <stdint.h>
27 #include <list>
28 
29 #include <ns3/ptr.h>
30 #include <ns3/simulator.h>
31 
32 namespace ns3 {
33 
34 class LteRlcSapUser;
35 class LtePdcpSapUser;
36 class LteRlcSapProvider;
37 class LtePdcpSapProvider;
38 class Packet;
39 
52 class LteRrcSap
53 {
54 public:
55 
56  virtual ~LteRrcSap ();
57 
58  // Information Elements
59 
61  {
62  uint32_t plmnIdentity;
63  };
64 
66  {
68  uint32_t cellIdentity;
70  uint32_t csgIdentity;
71  };
72 
73  struct FreqInfo
74  {
75  uint16_t ulCarrierFreq;
76  uint8_t ulBandwidth;
77  };
78 
79  struct RlcConfig
80  {
81  enum
82  {
83  AM,
87  } choice;
88  };
89 
91  {
92  uint8_t priority;
96  };
97 
99  {
100  enum {SETUP, RESET} type;
103  };
104 
106  {
107  enum {SETUP, RESET} type;
108  uint8_t srsBandwidth;
109  uint16_t srsConfigIndex;
110  };
111 
113  {
115  };
116 
117 
119  {
124  };
125 
126 
127  struct SrbToAddMod
128  {
129  uint8_t srbIdentity;
131  };
132 
133  struct DrbToAddMod
134  {
136  uint8_t drbIdentity;
140  };
141 
143  {
145  };
146 
148  {
151  };
152 
154  {
157  };
158 
160  {
162  };
163 
165  {
167  };
168 
170  {
171  std::list<SrbToAddMod> srbToAddModList;
172  std::list<DrbToAddMod> drbToAddModList;
173  std::list<uint8_t> drbToReleaseList;
176  };
177 
179  {
182  };
183 
185  {
186  uint8_t cellIndex;
187  uint16_t physCellId;
189  };
190 
192  {
193  uint16_t start;
194  bool haveRange;
195  uint16_t range;
196  };
197 
199  {
200  uint8_t cellIndex;
202  };
203 
205  {
206  uint16_t carrierFreq;
210  int8_t offsetFreq;
211  std::list<uint8_t> cellsToRemoveList;
212  std::list<CellsToAddMod> cellsToAddModList;
213  std::list<uint8_t> blackCellsToRemoveList;
214  std::list<BlackCellsToAddMod> blackCellsToAddModList;
217  };
218 
220  {
222  uint8_t range;
223  };
224 
226  {
229  ThresholdEutra threshold1; // used for A1, A2, A4, A5
230  ThresholdEutra threshold2; // used for A5
231  bool reportOnLeave; // used for A3
232  int8_t a3Offset; // used for A3
233  uint8_t hysteresis;
234  uint16_t timeToTrigger;
238  uint8_t maxReportCells;
241  uint8_t reportAmount;
242  };
243 
245  {
246  uint8_t measObjectId;
248  };
249 
251  {
252  uint8_t reportConfigId;
254  };
255 
257  {
258  uint8_t measId;
259  uint8_t measObjectId;
260  uint8_t reportConfigId;
261  };
262 
264  {
265  enum {SETUP, RESET} type;
267  uint8_t gapOffsetValue;
268  };
269 
271  {
272  uint8_t tEvaluation;
273  uint8_t tHystNormal;
276  };
277 
279  {
280  // 25 = oDot25, 50 = oDot5, 75 = oDot75, 100 = lDot0
281  uint8_t sfMedium;
282  uint8_t sfHigh;
283  };
284 
286  {
287  enum {SETUP, RESET} type;
290  };
291 
292  struct MeasConfig
293  {
294  std::list<uint8_t> measObjectToRemoveList;
295  std::list<MeasObjectToAddMod> measObjectToAddModList;
296  std::list<uint8_t> reportConfigToRemoveList;
297  std::list<ReportConfigToAddMod> reportConfigToAddModList;
298  std::list<uint8_t> measIdToRemoveList;
299  std::list<MeasIdToAddMod> measIdToAddModList;
305  uint8_t sMeasure;
308  };
309 
311  {
312  uint16_t dlCarrierFreq;
313  uint16_t ulCarrierFreq;
314  };
315 
317  {
318  uint8_t dlBandwidth;
319  uint8_t ulBandwidth;
320  };
321 
323  {
326  };
327 
329  {
335  uint16_t newUeIdentity;
339  };
340 
342  {
343  uint16_t cRnti;
344  uint16_t physCellId;
345  };
346 
348  {
352  };
353 
355  {
356  uint8_t dlBandwidth;
358  };
359 
361  {
363  };
364 
366  {
369  };
370 
372  {
373  bool haveSib2;
375  };
376 
377  struct AsConfig
378  {
381  uint16_t sourceUeIdentity;
386  };
387 
388  struct CgiInfo
389  {
390  uint32_t plmnIdentity;
391  uint32_t cellIdentity;
393  std::list<uint32_t> plmnIdentityList;
394  };
395 
397  {
398  uint16_t physCellId;
402  uint8_t rsrpResult;
404  uint8_t rsrqResult;
405  };
406 
407  struct MeasResults
408  {
409  uint8_t measId;
410  uint8_t rsrpResult;
411  uint8_t rsrqResult;
413  std::list<MeasResultEutra> measResultListEutra;
414  };
415 
416  // Messages
417 
419  {
420  uint64_t ueIdentity;
421  };
422 
424  {
427  };
428 
430  {
432  };
433 
435  {
443  };
444 
446  {
448  };
449 
450 
452  {
455  };
456 
458  {
461  };
462 
464  {
466  };
467 
469  {
470  };
471 
473  {
475  };
476 
478  {
479  uint8_t waitTime;
480  };
481 
483  {
485  };
486 
488  {
490  };
491 };
492 
493 
494 
502 {
503 public:
504 
506  {
509  };
510 
511  virtual void Setup (SetupParameters params) = 0;
512  virtual void SendRrcConnectionRequest (RrcConnectionRequest msg) = 0;
517 
518 };
519 
520 
528 {
529 public:
530 
532  {
535  };
536 
537  virtual void CompleteSetup (CompleteSetupParameters params) = 0;
538  virtual void RecvMasterInformationBlock (MasterInformationBlock msg) = 0;
540  virtual void RecvSystemInformation (SystemInformation msg) = 0;
541  virtual void RecvRrcConnectionSetup (RrcConnectionSetup msg) = 0;
545  virtual void RecvRrcConnectionRelease (RrcConnectionRelease msg) = 0;
546  virtual void RecvRrcConnectionReject (RrcConnectionReject msg) = 0;
547 
548 };
549 
550 
558 {
559 public:
560 
562  {
565  };
566 
567  virtual void SetupUe (uint16_t rnti, SetupUeParameters params) = 0;
568  virtual void RemoveUe (uint16_t rnti) = 0;
570  virtual void SendSystemInformation (SystemInformation msg) = 0;
571  virtual void SendRrcConnectionSetup (uint16_t rnti, RrcConnectionSetup msg) = 0;
572  virtual void SendRrcConnectionReconfiguration (uint16_t rnti, RrcConnectionReconfiguration msg) = 0;
573  virtual void SendRrcConnectionReestablishment (uint16_t rnti, RrcConnectionReestablishment msg) = 0;
575  virtual void SendRrcConnectionRelease (uint16_t rnti, RrcConnectionRelease msg) = 0;
576  virtual void SendRrcConnectionReject (uint16_t rnti, RrcConnectionReject msg) = 0;
581 
582 };
583 
584 
592 {
593 public:
594 
595 
597  {
600  };
601 
602  virtual void CompleteSetupUe (uint16_t rnti, CompleteSetupUeParameters params) = 0;
603  virtual void RecvRrcConnectionRequest (uint16_t rnti, RrcConnectionRequest msg) = 0;
604  virtual void RecvRrcConnectionSetupCompleted (uint16_t rnti, RrcConnectionSetupCompleted msg) = 0;
608  virtual void RecvMeasurementReport (uint16_t rnti, MeasurementReport msg) = 0;
609 
610 };
611 
612 
613 
614 
615 
616 
618 // templates
620 
621 
627 template <class C>
629 {
630 public:
631  MemberLteUeRrcSapUser (C* owner);
632 
633  // inherited from LteUeRrcSapUser
634  virtual void Setup (SetupParameters params);
640 
641 private:
644 };
645 
646 template <class C>
648  : m_owner (owner)
649 {
650 }
651 
652 template <class C>
654 {
655 }
656 
657 template <class C>
658 void
660 {
661  m_owner->DoSetup (params);
662 }
663 
664 template <class C>
665 void
667 {
668  m_owner->DoSendRrcConnectionRequest (msg);
669 }
670 
671 template <class C>
672 void
674 {
675  m_owner->DoSendRrcConnectionSetupCompleted (msg);
676 }
677 
678 template <class C>
679 void
681 {
682  m_owner->DoSendRrcConnectionReconfigurationCompleted (msg) ;
683 }
684 
685 template <class C>
686 void
688 {
689  m_owner->DoSendRrcConnectionReestablishmentRequest (msg);
690 }
691 
692 template <class C>
693 void
695 {
696  m_owner->DoSendRrcConnectionReestablishmentComplete (msg);
697 }
698 
704 template <class C>
706 {
707 public:
708  MemberLteUeRrcSapProvider (C* owner);
709 
710  // methods inherited from LteUeRrcSapProvider go here
711  virtual void CompleteSetup (CompleteSetupParameters params);
714  virtual void RecvSystemInformation (SystemInformation msg);
715  virtual void RecvRrcConnectionSetup (RrcConnectionSetup msg);
720  virtual void RecvRrcConnectionReject (RrcConnectionReject msg);
721 
722 private:
725 };
726 
727 template <class C>
729  : m_owner (owner)
730 {
731 }
732 
733 template <class C>
735 {
736 }
737 
738 template <class C>
739 void
741 {
742  m_owner->DoCompleteSetup (params);
743 }
744 
745 template <class C>
746 void
748 {
749  Simulator::ScheduleNow (&C::DoRecvMasterInformationBlock, m_owner, msg);
750 }
751 
752 template <class C>
753 void
755 {
756  Simulator::ScheduleNow (&C::DoRecvSystemInformationBlockType1, m_owner, msg);
757 }
758 
759 template <class C>
760 void
762 {
763  Simulator::ScheduleNow (&C::DoRecvSystemInformation, m_owner, msg);
764 }
765 
766 template <class C>
767 void
769 {
770  Simulator::ScheduleNow (&C::DoRecvRrcConnectionSetup, m_owner, msg);
771 }
772 
773 template <class C>
774 void
776 {
777  Simulator::ScheduleNow (&C::DoRecvRrcConnectionReconfiguration, m_owner, msg);
778 }
779 
780 template <class C>
781 void
783 {
784  Simulator::ScheduleNow (&C::DoRecvRrcConnectionReestablishment, m_owner, msg);
785 }
786 
787 template <class C>
788 void
790 {
791  Simulator::ScheduleNow (&C::DoRecvRrcConnectionReestablishmentReject, m_owner, msg);
792 }
793 
794 template <class C>
795 void
797 {
798  Simulator::ScheduleNow (&C::DoRecvRrcConnectionRelease, m_owner, msg);
799 }
800 
801 template <class C>
802 void
804 {
805  Simulator::ScheduleNow (&C::DoRecvRrcConnectionReject, m_owner, msg);
806 }
807 
808 
814 template <class C>
816 {
817 public:
818  MemberLteEnbRrcSapUser (C* owner);
819 
820  // inherited from LteEnbRrcSapUser
821 
822  virtual void SetupUe (uint16_t rnti, SetupUeParameters params);
823  virtual void RemoveUe (uint16_t rnti);
826  virtual void SendSystemInformation (SystemInformation msg);
827  virtual void SendRrcConnectionSetup (uint16_t rnti, RrcConnectionSetup msg);
828  virtual void SendRrcConnectionReconfiguration (uint16_t rnti, RrcConnectionReconfiguration msg);
829  virtual void SendRrcConnectionReestablishment (uint16_t rnti, RrcConnectionReestablishment msg);
831  virtual void SendRrcConnectionRelease (uint16_t rnti, RrcConnectionRelease msg);
832  virtual void SendRrcConnectionReject (uint16_t rnti, RrcConnectionReject msg);
837 
838 private:
841 };
842 
843 template <class C>
845  : m_owner (owner)
846 {
847 }
848 
849 template <class C>
851 {
852 }
853 
854 template <class C>
855 void
857 {
858  m_owner->DoSetupUe (rnti, params);
859 }
860 
861 template <class C>
862 void
864 {
865  m_owner->DoRemoveUe (rnti);
866 }
867 
868 template <class C>
869 void
871 {
872  m_owner->DoSendMasterInformationBlock (msg);
873 }
874 
875 template <class C>
876 void
878 {
879  m_owner->DoSendSystemInformationBlockType1 (msg);
880 }
881 
882 template <class C>
883 void
885 {
886  m_owner->DoSendSystemInformation (msg);
887 }
888 
889 template <class C>
890 void
892 {
893  m_owner->DoSendRrcConnectionSetup (rnti, msg) ;
894 }
895 
896 template <class C>
897 void
899 {
900  m_owner->DoSendRrcConnectionReconfiguration (rnti, msg);
901 }
902 
903 template <class C>
904 void
906 {
907  m_owner->DoSendRrcConnectionReestablishment (rnti, msg);
908 }
909 
910 template <class C>
911 void
913 {
914  m_owner->DoSendRrcConnectionReestablishmentReject (rnti, msg);
915 }
916 
917 template <class C>
918 void
920 {
921  m_owner->DoSendRrcConnectionRelease (rnti, msg);
922 }
923 
924 template <class C>
925 void
927 {
928  m_owner->DoSendRrcConnectionReject (rnti, msg);
929 }
930 
931 template <class C>
934 {
935  return m_owner->DoEncodeHandoverPreparationInformation (msg);
936 }
937 
938 template <class C>
941 {
942  return m_owner->DoDecodeHandoverPreparationInformation (p);
943 }
944 
945 
946 template <class C>
949 {
950  return m_owner->DoEncodeHandoverCommand (msg);
951 }
952 
953 template <class C>
956 {
957  return m_owner->DoDecodeHandoverCommand (p);
958 }
959 
965 template <class C>
967 {
968 public:
969  MemberLteEnbRrcSapProvider (C* owner);
970 
971  // methods inherited from LteEnbRrcSapProvider go here
972 
973  virtual void CompleteSetupUe (uint16_t rnti, CompleteSetupUeParameters params);
974  virtual void RecvRrcConnectionRequest (uint16_t rnti, RrcConnectionRequest msg);
975  virtual void RecvRrcConnectionSetupCompleted (uint16_t rnti, RrcConnectionSetupCompleted msg);
979  virtual void RecvMeasurementReport (uint16_t rnti, MeasurementReport msg);
980 
981 private:
984 };
985 
986 template <class C>
988  : m_owner (owner)
989 {
990 }
991 
992 template <class C>
994 {
995 }
996 
997 template <class C>
998 void
1000 {
1001  m_owner->DoCompleteSetupUe (rnti, params);
1002 }
1003 
1004 template <class C>
1005 void
1007 {
1008  Simulator::ScheduleNow (&C::DoRecvRrcConnectionRequest, m_owner, rnti, msg);
1009 }
1010 
1011 template <class C>
1012 void
1014 {
1015  Simulator::ScheduleNow (&C::DoRecvRrcConnectionSetupCompleted, m_owner, rnti, msg);
1016 }
1017 
1018 template <class C>
1019 void
1021 {
1022  Simulator::ScheduleNow (&C::DoRecvRrcConnectionReconfigurationCompleted, m_owner, rnti, msg);
1023 }
1024 
1025 template <class C>
1026 void
1028 {
1029  Simulator::ScheduleNow (&C::DoRecvRrcConnectionReestablishmentRequest, m_owner, rnti, msg);
1030 }
1031 
1032 template <class C>
1033 void
1035 {
1036  Simulator::ScheduleNow (&C::DoRecvRrcConnectionReestablishmentComplete, m_owner, rnti, msg);
1037 }
1038 
1039 template <class C>
1040 void
1042 {
1043  Simulator::ScheduleNow (&C::DoRecvMeasurementReport, m_owner, rnti, msg);
1044 }
1045 
1046 
1047 
1048 
1049 
1050 
1051 
1052 
1053 
1054 
1055 
1056 
1057 
1058 
1059 } // namespace ns3
1060 
1061 
1062 #endif // LTE_RRC_SAP_H
1063 
1064 
1065 
1066