A Discrete-Event Network Simulator
API
epc-x2-header.cc
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 #include "ns3/log.h"
22 #include "ns3/epc-x2-header.h"
23 
24 
25 namespace ns3 {
26 
27 NS_LOG_COMPONENT_DEFINE ("EpcX2Header");
28 
29 NS_OBJECT_ENSURE_REGISTERED (EpcX2Header);
30 
32  : m_messageType (0xfa),
33  m_procedureCode (0xfa),
34  m_lengthOfIes (0xfa),
35  m_numberOfIes (0xfa)
36 {
37 }
38 
40 {
41  m_messageType = 0xfb;
42  m_procedureCode = 0xfb;
43  m_lengthOfIes = 0xfb;
44  m_numberOfIes = 0xfb;
45 }
46 
47 TypeId
49 {
50  static TypeId tid = TypeId ("ns3::EpcX2Header")
51  .SetParent<Header> ()
52  .AddConstructor<EpcX2Header> ()
53  ;
54  return tid;
55 }
56 
57 TypeId
59 {
60  return GetTypeId ();
61 }
62 
63 uint32_t
65 {
66  return 7;
67 }
68 
69 void
71 {
73 
76 
77  i.WriteU8 (0x00); // criticality = REJECT
78  i.WriteU8 (m_lengthOfIes + 3);
79  i.WriteHtonU16 (0);
81 }
82 
83 uint32_t
85 {
87 
88  m_messageType = i.ReadU8 ();
89  m_procedureCode = i.ReadU8 ();
90 
91  i.ReadU8 ();
92  m_lengthOfIes = i.ReadU8 () - 3;
93  i.ReadNtohU16 ();
94  m_numberOfIes = i.ReadU8 ();
95 
96  return GetSerializedSize ();
97 }
98 
99 void
100 EpcX2Header::Print (std::ostream &os) const
101 {
102  os << "MessageType=" << (uint32_t) m_messageType;
103  os << " ProcedureCode=" << (uint32_t) m_procedureCode;
104  os << " LengthOfIEs=" << (uint32_t) m_lengthOfIes;
105  os << " NumberOfIEs=" << (uint32_t) m_numberOfIes;
106 }
107 
108 uint8_t
110 {
111  return m_messageType;
112 }
113 
114 void
115 EpcX2Header::SetMessageType (uint8_t messageType)
116 {
117  m_messageType = messageType;
118 }
119 
120 uint8_t
122 {
123  return m_procedureCode;
124 }
125 
126 void
127 EpcX2Header::SetProcedureCode (uint8_t procedureCode)
128 {
129  m_procedureCode = procedureCode;
130 }
131 
132 
133 void
134 EpcX2Header::SetLengthOfIes (uint32_t lengthOfIes)
135 {
136  m_lengthOfIes = lengthOfIes;
137 }
138 
139 void
140 EpcX2Header::SetNumberOfIes (uint32_t numberOfIes)
141 {
142  m_numberOfIes = numberOfIes;
143 }
144 
146 
148 
150  : m_numberOfIes (1 + 1 + 1 + 1),
151  m_headerLength (6 + 5 + 12 + (3 + 4 + 8 + 8 + 4)),
152  m_oldEnbUeX2apId (0xfffa),
153  m_cause (0xfffa),
154  m_targetCellId (0xfffa),
155  m_mmeUeS1apId (0xfffffffa)
156 {
157  m_erabsToBeSetupList.clear ();
158 }
159 
161 {
162  m_numberOfIes = 0;
163  m_headerLength = 0;
164  m_oldEnbUeX2apId = 0xfffb;
165  m_cause = 0xfffb;
166  m_targetCellId = 0xfffb;
167  m_mmeUeS1apId = 0xfffffffb;
168  m_erabsToBeSetupList.clear ();
169 }
170 
171 TypeId
173 {
174  static TypeId tid = TypeId ("ns3::EpcX2HandoverRequestHeader")
175  .SetParent<Header> ()
176  .AddConstructor<EpcX2HandoverRequestHeader> ()
177  ;
178  return tid;
179 }
180 
181 TypeId
183 {
184  return GetTypeId ();
185 }
186 
187 uint32_t
189 {
190  return m_headerLength;
191 }
192 
193 void
195 {
197 
198  i.WriteHtonU16 (10); // id = OLD_ENB_UE_X2AP_ID
199  i.WriteU8 (0); // criticality = REJECT
200  i.WriteU8 (2); // length of OLD_ENB_UE_X2AP_ID
202 
203  i.WriteHtonU16 (5); // id = CAUSE
204  i.WriteU8 (1 << 6); // criticality = IGNORE
205  i.WriteU8 (1); // length of CAUSE
206  i.WriteU8 (m_cause);
207 
208  i.WriteHtonU16 (11); // id = TARGET_CELLID
209  i.WriteU8 (0); // criticality = REJECT
210  i.WriteU8 (8); // length of TARGET_CELLID
211  i.WriteHtonU32 (0x123456); // fake PLMN
212  i.WriteHtonU32 (m_targetCellId << 4);
213 
214  i.WriteHtonU16 (14); // id = UE_CONTEXT_INFORMATION
215  i.WriteU8 (0); // criticality = REJECT
216 
220 
221  std::vector <EpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size ();
222  i.WriteHtonU32 (sz); // number of bearers
223  for (int j = 0; j < (int) sz; j++)
224  {
225  i.WriteHtonU16 (m_erabsToBeSetupList [j].erabId);
226  i.WriteHtonU16 (m_erabsToBeSetupList [j].erabLevelQosParameters.qci);
227  i.WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.gbrDl);
228  i.WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.gbrUl);
229  i.WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.mbrDl);
230  i.WriteHtonU64 (m_erabsToBeSetupList [j].erabLevelQosParameters.gbrQosInfo.mbrUl);
231  i.WriteU8 (m_erabsToBeSetupList [j].erabLevelQosParameters.arp.priorityLevel);
232  i.WriteU8 (m_erabsToBeSetupList [j].erabLevelQosParameters.arp.preemptionCapability);
233  i.WriteU8 (m_erabsToBeSetupList [j].erabLevelQosParameters.arp.preemptionVulnerability);
234  i.WriteU8 (m_erabsToBeSetupList [j].dlForwarding);
235  i.WriteHtonU32 (m_erabsToBeSetupList [j].transportLayerAddress.Get ());
236  i.WriteHtonU32 (m_erabsToBeSetupList [j].gtpTeid);
237  }
238 
239 }
240 
241 uint32_t
243 {
245 
246  m_headerLength = 0;
247  m_numberOfIes = 0;
248 
249  i.ReadNtohU16 ();
250  i.ReadU8 ();
251  i.ReadU8 ();
253  m_headerLength += 6;
254  m_numberOfIes++;
255 
256  i.ReadNtohU16 ();
257  i.ReadU8 ();
258  i.ReadU8 ();
259  m_cause = i.ReadU8 ();
260  m_headerLength += 5;
261  m_numberOfIes++;
262 
263  i.ReadNtohU16 ();
264  i.ReadU8 ();
265  i.ReadU8 ();
266  i.ReadNtohU32 ();
267  m_targetCellId = i.ReadNtohU32 () >> 4;
268  m_headerLength += 12;
269  m_numberOfIes++;
270 
271  i.ReadNtohU16 ();
272  i.ReadU8 ();
273  m_mmeUeS1apId = i.ReadNtohU32 ();
276  int sz = i.ReadNtohU32 ();
277  m_headerLength += 27;
278  m_numberOfIes++;
279 
280  for (int j = 0; j < sz; j++)
281  {
283 
284  erabItem.erabId = i.ReadNtohU16 ();
285 
294 
295  erabItem.dlForwarding = i.ReadU8 ();
297  erabItem.gtpTeid = i.ReadNtohU32 ();
298 
299  m_erabsToBeSetupList.push_back (erabItem);
300  m_headerLength += 48;
301  }
302 
303  return GetSerializedSize ();
304 }
305 
306 void
307 EpcX2HandoverRequestHeader::Print (std::ostream &os) const
308 {
309  os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
310  os << " Cause = " << m_cause;
311  os << " TargetCellId = " << m_targetCellId;
312  os << " MmeUeS1apId = " << m_mmeUeS1apId;
313  os << " UeAggrMaxBitRateDownlink = " << m_ueAggregateMaxBitRateDownlink;
314  os << " UeAggrMaxBitRateUplink = " << m_ueAggregateMaxBitRateUplink;
315  os << " NumOfBearers = " << m_erabsToBeSetupList.size ();
316 
317  std::vector <EpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size ();
318  if (sz > 0)
319  {
320  os << " [";
321  }
322  for (int j = 0; j < (int) sz; j++)
323  {
324  os << m_erabsToBeSetupList[j].erabId;
325  if (j < (int) sz - 1)
326  {
327  os << ", ";
328  }
329  else
330  {
331  os << "]";
332  }
333  }
334 }
335 
336 uint16_t
338 {
339  return m_oldEnbUeX2apId;
340 }
341 
342 void
344 {
345  m_oldEnbUeX2apId = x2apId;
346 }
347 
348 uint16_t
350 {
351  return m_cause;
352 }
353 
354 void
356 {
357  m_cause = cause;
358 }
359 
360 uint16_t
362 {
363  return m_targetCellId;
364 }
365 
366 void
368 {
369  m_targetCellId = targetCellId;
370 }
371 
372 uint32_t
374 {
375  return m_mmeUeS1apId;
376 }
377 
378 void
380 {
381  m_mmeUeS1apId = mmeUeS1apId;
382 }
383 
384 std::vector <EpcX2Sap::ErabToBeSetupItem>
386 {
387  return m_erabsToBeSetupList;
388 }
389 
390 void
391 EpcX2HandoverRequestHeader::SetBearers (std::vector <EpcX2Sap::ErabToBeSetupItem> bearers)
392 {
393  m_headerLength += 48 * bearers.size ();
394  m_erabsToBeSetupList = bearers;
395 }
396 
397 uint64_t
399 {
401 }
402 
403 void
405 {
407 }
408 
409 uint64_t
411 {
413 }
414 
415 void
417 {
419 }
420 
421 uint32_t
423 {
424  return m_headerLength;
425 }
426 
427 uint32_t
429 {
430  return m_numberOfIes;
431 }
432 
434 
436 
438  : m_numberOfIes (1 + 1 + 1 + 1),
439  m_headerLength (2 + 2 + 4 + 4),
440  m_oldEnbUeX2apId (0xfffa),
441  m_newEnbUeX2apId (0xfffa)
442 {
443 }
444 
446 {
447  m_numberOfIes = 0;
448  m_headerLength = 0;
449  m_oldEnbUeX2apId = 0xfffb;
450  m_newEnbUeX2apId = 0xfffb;
451  m_erabsAdmittedList.clear ();
452  m_erabsNotAdmittedList.clear ();
453 }
454 
455 TypeId
457 {
458  static TypeId tid = TypeId ("ns3::EpcX2HandoverRequestAckHeader")
459  .SetParent<Header> ()
460  .AddConstructor<EpcX2HandoverRequestAckHeader> ()
461  ;
462  return tid;
463 }
464 
465 TypeId
467 {
468  return GetTypeId ();
469 }
470 
471 uint32_t
473 {
474  return m_headerLength;
475 }
476 
477 void
479 {
481 
484 
485  std::vector <EpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size ();
486  i.WriteHtonU32 (sz);
487  for (int j = 0; j < (int) sz; j++)
488  {
489  i.WriteHtonU16 (m_erabsAdmittedList [j].erabId);
490  i.WriteHtonU32 (m_erabsAdmittedList [j].ulGtpTeid);
491  i.WriteHtonU32 (m_erabsAdmittedList [j].dlGtpTeid);
492  }
493 
494  std::vector <EpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size ();
495  i.WriteHtonU32 (sz2);
496  for (int j = 0; j < (int) sz2; j++)
497  {
498  i.WriteHtonU16 (m_erabsNotAdmittedList [j].erabId);
499  i.WriteHtonU16 (m_erabsNotAdmittedList [j].cause);
500  }
501 }
502 
503 uint32_t
505 {
507 
508  m_headerLength = 0;
509  m_numberOfIes = 0;
510 
513  m_headerLength += 4;
514  m_numberOfIes += 2;
515 
516  int sz = i.ReadNtohU32 ();
517  m_headerLength += 4;
518  m_numberOfIes++;
519 
520  for (int j = 0; j < sz; j++)
521  {
523 
524  erabItem.erabId = i.ReadNtohU16 ();
525  erabItem.ulGtpTeid = i.ReadNtohU32 ();
526  erabItem.dlGtpTeid = i.ReadNtohU32 ();
527 
528  m_erabsAdmittedList.push_back (erabItem);
529  m_headerLength += 10;
530  }
531 
532  sz = i.ReadNtohU32 ();
533  m_headerLength += 4;
534  m_numberOfIes++;
535 
536  for (int j = 0; j < sz; j++)
537  {
539 
540  erabItem.erabId = i.ReadNtohU16 ();
541  erabItem.cause = i.ReadNtohU16 ();
542 
543  m_erabsNotAdmittedList.push_back (erabItem);
544  m_headerLength += 4;
545  }
546 
547  return GetSerializedSize ();
548 }
549 
550 void
551 EpcX2HandoverRequestAckHeader::Print (std::ostream &os) const
552 {
553  os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
554  os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
555 
556  os << " AdmittedBearers=" << m_erabsAdmittedList.size ();
557  std::vector <EpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size ();
558  if (sz > 0)
559  {
560  os << " [";
561  }
562  for (int j = 0; j < (int) sz; j++)
563  {
564  os << m_erabsAdmittedList[j].erabId;
565  if (j < (int) sz - 1)
566  {
567  os << ", ";
568  }
569  else
570  {
571  os << "]";
572  }
573  }
574 
575  os << " NotAdmittedBearers=" << m_erabsNotAdmittedList.size ();
576  std::vector <EpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size ();
577  if (sz2 > 0)
578  {
579  os << " [";
580  }
581  for (int j = 0; j < (int) sz2; j++)
582  {
583  os << m_erabsNotAdmittedList[j].erabId;
584  if (j < (int) sz2 - 1)
585  {
586  os << ", ";
587  }
588  else
589  {
590  os << "]";
591  }
592  }
593 
594 }
595 
596 uint16_t
598 {
599  return m_oldEnbUeX2apId;
600 }
601 
602 void
604 {
605  m_oldEnbUeX2apId = x2apId;
606 }
607 
608 uint16_t
610 {
611  return m_newEnbUeX2apId;
612 }
613 
614 void
616 {
617  m_newEnbUeX2apId = x2apId;
618 }
619 
620 std::vector <EpcX2Sap::ErabAdmittedItem>
622 {
623  return m_erabsAdmittedList;
624 }
625 
626 void
627 EpcX2HandoverRequestAckHeader::SetAdmittedBearers (std::vector <EpcX2Sap::ErabAdmittedItem> bearers)
628 {
629  m_headerLength += 10 * bearers.size ();
630  m_erabsAdmittedList = bearers;
631 }
632 
633 std::vector <EpcX2Sap::ErabNotAdmittedItem>
635 {
636  return m_erabsNotAdmittedList;
637 }
638 
639 void
640 EpcX2HandoverRequestAckHeader::SetNotAdmittedBearers (std::vector <EpcX2Sap::ErabNotAdmittedItem> bearers)
641 {
642  m_headerLength += 4 * bearers.size ();
643  m_erabsNotAdmittedList = bearers;
644 }
645 
646 uint32_t
648 {
649  return m_headerLength;
650 }
651 
652 uint32_t
654 {
655  return m_numberOfIes;
656 }
657 
659 
661 
663  : m_numberOfIes (1 + 1 + 1),
664  m_headerLength (2 + 2 + 2),
665  m_oldEnbUeX2apId (0xfffa),
666  m_cause (0xfffa),
667  m_criticalityDiagnostics (0xfffa)
668 {
669 }
670 
672 {
673  m_numberOfIes = 0;
674  m_headerLength = 0;
675  m_oldEnbUeX2apId = 0xfffb;
676  m_cause = 0xfffb;
677  m_criticalityDiagnostics = 0xfffb;
678 }
679 
680 TypeId
682 {
683  static TypeId tid = TypeId ("ns3::EpcX2HandoverPreparationFailureHeader")
684  .SetParent<Header> ()
685  .AddConstructor<EpcX2HandoverPreparationFailureHeader> ()
686  ;
687  return tid;
688 }
689 
690 TypeId
692 {
693  return GetTypeId ();
694 }
695 
696 uint32_t
698 {
699  return m_headerLength;
700 }
701 
702 void
704 {
706 
708  i.WriteHtonU16 (m_cause);
710 }
711 
712 uint32_t
714 {
716 
718  m_cause = i.ReadNtohU16 ();
720 
721  m_headerLength = 6;
722  m_numberOfIes = 3;
723 
724  return GetSerializedSize ();
725 }
726 
727 void
729 {
730  os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
731  os << " Cause = " << m_cause;
732  os << " CriticalityDiagnostics = " << m_criticalityDiagnostics;
733 }
734 
735 uint16_t
737 {
738  return m_oldEnbUeX2apId;
739 }
740 
741 void
743 {
744  m_oldEnbUeX2apId = x2apId;
745 }
746 
747 uint16_t
749 {
750  return m_cause;
751 }
752 
753 void
755 {
756  m_cause = cause;
757 }
758 
759 uint16_t
761 {
763 }
764 
765 void
767 {
768  m_criticalityDiagnostics = criticalityDiagnostics;
769 }
770 
771 uint32_t
773 {
774  return m_headerLength;
775 }
776 
777 uint32_t
779 {
780  return m_numberOfIes;
781 }
782 
784 
786 
788  : m_numberOfIes (3),
789  m_headerLength (6),
790  m_oldEnbUeX2apId (0xfffa),
791  m_newEnbUeX2apId (0xfffa)
792 {
794 }
795 
797 {
798  m_numberOfIes = 0;
799  m_headerLength = 0;
800  m_oldEnbUeX2apId = 0xfffb;
801  m_newEnbUeX2apId = 0xfffb;
803 }
804 
805 TypeId
807 {
808  static TypeId tid = TypeId ("ns3::EpcX2SnStatusTransferHeader")
809  .SetParent<Header> ()
810  .AddConstructor<EpcX2SnStatusTransferHeader> ()
811  ;
812  return tid;
813 }
814 
815 TypeId
817 {
818  return GetTypeId ();
819 }
820 
821 uint32_t
823 {
824  return m_headerLength;
825 }
826 
827 void
829 {
831 
834 
835  std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz = m_erabsSubjectToStatusTransferList.size ();
836  i.WriteHtonU16 (sz); // number of ErabsSubjectToStatusTransferItems
837 
838  for (int j = 0; j < (int) sz; j++)
839  {
841 
842  i.WriteHtonU16 (item.erabId);
843 
844  uint16_t bitsetSize = EpcX2Sap::m_maxPdcpSn / 64;
845  for (int k = 0; k < bitsetSize; k++)
846  {
847  uint64_t statusValue = 0;
848  for (int m = 0; m < 64; m++)
849  {
850  statusValue |= item.receiveStatusOfUlPdcpSdus[64 * k + m] << m;
851  }
852  i.WriteHtonU64 (statusValue);
853  }
854 
855  i.WriteHtonU16 (item.ulPdcpSn);
856  i.WriteHtonU32 (item.ulHfn);
857  i.WriteHtonU16 (item.dlPdcpSn);
858  i.WriteHtonU32 (item.dlHfn);
859  }
860 }
861 
862 uint32_t
864 {
866 
869  int sz = i.ReadNtohU16 ();
870 
871  m_numberOfIes = 3;
872  m_headerLength = 6 + sz * (14 + (EpcX2Sap::m_maxPdcpSn / 64));
873 
874  for (int j = 0; j < sz; j++)
875  {
877  ErabItem.erabId = i.ReadNtohU16 ();
878 
879  uint16_t bitsetSize = EpcX2Sap::m_maxPdcpSn / 64;
880  for (int k = 0; k < bitsetSize; k++)
881  {
882  uint64_t statusValue = i.ReadNtohU64 ();
883  for (int m = 0; m < 64; m++)
884  {
885  ErabItem.receiveStatusOfUlPdcpSdus[64 * k + m] = (statusValue >> m) & 1;
886  }
887  }
888 
889  ErabItem.ulPdcpSn = i.ReadNtohU16 ();
890  ErabItem.ulHfn = i.ReadNtohU32 ();
891  ErabItem.dlPdcpSn = i.ReadNtohU16 ();
892  ErabItem.dlHfn = i.ReadNtohU32 ();
893 
894  m_erabsSubjectToStatusTransferList.push_back (ErabItem);
895  }
896 
897  return GetSerializedSize ();
898 }
899 
900 void
901 EpcX2SnStatusTransferHeader::Print (std::ostream &os) const
902 {
903  os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
904  os << " NewEnbUeX2apId = " << m_newEnbUeX2apId;
905  os << " ErabsSubjectToStatusTransferList size = " << m_erabsSubjectToStatusTransferList.size ();
906 
907  std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz = m_erabsSubjectToStatusTransferList.size ();
908  if (sz > 0)
909  {
910  os << " [";
911  }
912  for (int j = 0; j < (int) sz; j++)
913  {
914  os << m_erabsSubjectToStatusTransferList[j].erabId;
915  if (j < (int) sz - 1)
916  {
917  os << ", ";
918  }
919  else
920  {
921  os << "]";
922  }
923  }
924 }
925 
926 uint16_t
928 {
929  return m_oldEnbUeX2apId;
930 }
931 
932 void
934 {
935  m_oldEnbUeX2apId = x2apId;
936 }
937 
938 uint16_t
940 {
941  return m_newEnbUeX2apId;
942 }
943 
944 void
946 {
947  m_newEnbUeX2apId = x2apId;
948 }
949 
950 std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem>
952 {
954 }
955 
956 void
957 EpcX2SnStatusTransferHeader::SetErabsSubjectToStatusTransferList (std::vector <EpcX2Sap::ErabsSubjectToStatusTransferItem> erabs)
958 {
959  m_headerLength += erabs.size () * (14 + (EpcX2Sap::m_maxPdcpSn / 8));
961 }
962 
963 uint32_t
965 {
966  return m_headerLength;
967 }
968 
969 uint32_t
971 {
972  return m_numberOfIes;
973 }
974 
976 
978 
980  : m_numberOfIes (1 + 1),
981  m_headerLength (2 + 2),
982  m_oldEnbUeX2apId (0xfffa),
983  m_newEnbUeX2apId (0xfffa)
984 {
985 }
986 
988 {
989  m_numberOfIes = 0;
990  m_headerLength = 0;
991  m_oldEnbUeX2apId = 0xfffb;
992  m_newEnbUeX2apId = 0xfffb;
993 }
994 
995 TypeId
997 {
998  static TypeId tid = TypeId ("ns3::EpcX2UeContextReleaseHeader")
999  .SetParent<Header> ()
1000  .AddConstructor<EpcX2UeContextReleaseHeader> ()
1001  ;
1002  return tid;
1003 }
1004 
1005 TypeId
1007 {
1008  return GetTypeId ();
1009 }
1010 
1011 uint32_t
1013 {
1014  return m_headerLength;
1015 }
1016 
1017 void
1019 {
1020  Buffer::Iterator i = start;
1021 
1024 }
1025 
1026 uint32_t
1028 {
1029  Buffer::Iterator i = start;
1030 
1033  m_numberOfIes = 2;
1034  m_headerLength = 4;
1035 
1036  return GetSerializedSize ();
1037 }
1038 
1039 void
1040 EpcX2UeContextReleaseHeader::Print (std::ostream &os) const
1041 {
1042  os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
1043  os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
1044 }
1045 
1046 uint16_t
1048 {
1049  return m_oldEnbUeX2apId;
1050 }
1051 
1052 void
1054 {
1055  m_oldEnbUeX2apId = x2apId;
1056 }
1057 
1058 uint16_t
1060 {
1061  return m_newEnbUeX2apId;
1062 }
1063 
1064 void
1066 {
1067  m_newEnbUeX2apId = x2apId;
1068 }
1069 
1070 uint32_t
1072 {
1073  return m_headerLength;
1074 }
1075 
1076 uint32_t
1078 {
1079  return m_numberOfIes;
1080 }
1081 
1083 
1085 
1087  : m_numberOfIes (1),
1088  m_headerLength (6)
1089 {
1090  m_cellInformationList.clear ();
1091 }
1092 
1094 {
1095  m_numberOfIes = 0;
1096  m_headerLength = 0;
1097  m_cellInformationList.clear ();
1098 }
1099 
1100 TypeId
1102 {
1103  static TypeId tid = TypeId ("ns3::EpcX2LoadInformationHeader")
1104  .SetParent<Header> ()
1105  .AddConstructor<EpcX2LoadInformationHeader> ()
1106  ;
1107  return tid;
1108 }
1109 
1110 TypeId
1112 {
1113  return GetTypeId ();
1114 }
1115 
1116 uint32_t
1118 {
1119  return m_headerLength;
1120 }
1121 
1122 void
1124 {
1125  Buffer::Iterator i = start;
1126 
1127  i.WriteHtonU16 (6); // id = CELL_INFORMATION
1128  i.WriteU8 (1 << 6); // criticality = IGNORE
1129  i.WriteU8 (4); // length of CELL_INFORMATION_ID
1130 
1131  std::vector <EpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size ();
1132  i.WriteHtonU16 (sz); // number of cellInformationItems
1133 
1134  for (int j = 0; j < (int) sz; j++)
1135  {
1136  i.WriteHtonU16 (m_cellInformationList [j].sourceCellId);
1137 
1138  std::vector <EpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1139  sz2 = m_cellInformationList [j].ulInterferenceOverloadIndicationList.size ();
1140  i.WriteHtonU16 (sz2); // number of UlInterferenceOverloadIndicationItem
1141 
1142  for (int k = 0; k < (int) sz2; k++)
1143  {
1144  i.WriteU8 (m_cellInformationList [j].ulInterferenceOverloadIndicationList [k]);
1145  }
1146 
1147  std::vector <EpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1148  sz3 = m_cellInformationList [j].ulHighInterferenceInformationList.size ();
1149  i.WriteHtonU16 (sz3); // number of UlHighInterferenceInformationItem
1150 
1151  for (int k = 0; k < (int) sz3; k++)
1152  {
1153  i.WriteHtonU16 (m_cellInformationList [j].ulHighInterferenceInformationList [k].targetCellId);
1154 
1155  std::vector <bool>::size_type sz4;
1156  sz4 = m_cellInformationList [j].ulHighInterferenceInformationList [k].ulHighInterferenceIndicationList.size ();
1157  i.WriteHtonU16 (sz4);
1158 
1159  for (int m = 0; m < (int) sz4; m++)
1160  {
1161  i.WriteU8 (m_cellInformationList [j].ulHighInterferenceInformationList [k].ulHighInterferenceIndicationList [m]);
1162  }
1163  }
1164 
1165  std::vector <bool>::size_type sz5;
1166  sz5 = m_cellInformationList [j].relativeNarrowbandTxBand.rntpPerPrbList.size ();
1167  i.WriteHtonU16 (sz5);
1168 
1169  for (int k = 0; k < (int) sz5; k++)
1170  {
1171  i.WriteU8 (m_cellInformationList [j].relativeNarrowbandTxBand.rntpPerPrbList [k]);
1172  }
1173 
1174  i.WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.rntpThreshold);
1175  i.WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.antennaPorts);
1176  i.WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.pB);
1177  i.WriteHtonU16 (m_cellInformationList [j].relativeNarrowbandTxBand.pdcchInterferenceImpact);
1178  }
1179 }
1180 
1181 uint32_t
1183 {
1184  Buffer::Iterator i = start;
1185 
1186  m_headerLength = 0;
1187  m_numberOfIes = 0;
1188 
1189  i.ReadNtohU16 ();
1190  i.ReadU8 ();
1191  i.ReadU8 ();
1192  int sz = i.ReadNtohU16 ();
1193  m_headerLength += 6;
1194  m_numberOfIes++;
1195 
1196  for (int j = 0; j < sz; j++)
1197  {
1198  EpcX2Sap::CellInformationItem cellInfoItem;
1199  cellInfoItem.sourceCellId = i.ReadNtohU16 ();
1200  m_headerLength += 2;
1201 
1202  int sz2 = i.ReadNtohU16 ();
1203  m_headerLength += 2;
1204  for (int k = 0; k < sz2; k++)
1205  {
1207  cellInfoItem.ulInterferenceOverloadIndicationList.push_back (item);
1208  }
1209  m_headerLength += sz2;
1210 
1211  int sz3 = i.ReadNtohU16 ();
1212  m_headerLength += 2;
1213  for (int k = 0; k < sz3; k++)
1214  {
1216  item.targetCellId = i.ReadNtohU16 ();
1217  m_headerLength += 2;
1218 
1219  int sz4 = i.ReadNtohU16 ();
1220  m_headerLength += 2;
1221  for (int m = 0; m < sz4; m++)
1222  {
1223  item.ulHighInterferenceIndicationList.push_back (i.ReadU8 ());
1224  }
1225  m_headerLength += sz4;
1226 
1227  cellInfoItem.ulHighInterferenceInformationList.push_back (item);
1228  }
1229 
1230  int sz5 = i.ReadNtohU16 ();
1231  m_headerLength += 2;
1232  for (int k = 0; k < sz5; k++)
1233  {
1234  cellInfoItem.relativeNarrowbandTxBand.rntpPerPrbList.push_back (i.ReadU8 ());
1235  }
1236  m_headerLength += sz5;
1237 
1240  cellInfoItem.relativeNarrowbandTxBand.pB = i.ReadNtohU16 ();
1242  m_headerLength += 8;
1243 
1244  m_cellInformationList.push_back (cellInfoItem);
1245  }
1246 
1247  return GetSerializedSize ();
1248 }
1249 
1250 void
1251 EpcX2LoadInformationHeader::Print (std::ostream &os) const
1252 {
1253  os << "NumOfCellInformationItems=" << m_cellInformationList.size ();
1254 }
1255 
1256 std::vector <EpcX2Sap::CellInformationItem>
1258 {
1259  return m_cellInformationList;
1260 }
1261 
1262 void
1263 EpcX2LoadInformationHeader::SetCellInformationList (std::vector <EpcX2Sap::CellInformationItem> cellInformationList)
1264 {
1265  m_cellInformationList = cellInformationList;
1266  m_headerLength += 2;
1267 
1268  std::vector <EpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size ();
1269  for (int j = 0; j < (int) sz; j++)
1270  {
1271  m_headerLength += 2;
1272 
1273  std::vector <EpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1274  sz2 = m_cellInformationList [j].ulInterferenceOverloadIndicationList.size ();
1275  m_headerLength += 2 + sz2;
1276 
1277  std::vector <EpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1278  sz3 = m_cellInformationList [j].ulHighInterferenceInformationList.size ();
1279  m_headerLength += 2;
1280 
1281  for (int k = 0; k < (int) sz3; k++)
1282  {
1283  std::vector <bool>::size_type sz4;
1284  sz4 = m_cellInformationList [j].ulHighInterferenceInformationList [k].ulHighInterferenceIndicationList.size ();
1285  m_headerLength += 2 + 2 + sz4;
1286  }
1287 
1288  std::vector <bool>::size_type sz5;
1289  sz5 = m_cellInformationList [j].relativeNarrowbandTxBand.rntpPerPrbList.size ();
1290  m_headerLength += 2 + sz5 + 8;
1291  }
1292 }
1293 
1294 uint32_t
1296 {
1297  return m_headerLength;
1298 }
1299 
1300 uint32_t
1302 {
1303  return m_numberOfIes;
1304 }
1305 
1307 
1309 
1311  : m_numberOfIes (3),
1312  m_headerLength (6),
1313  m_enb1MeasurementId (0xfffa),
1314  m_enb2MeasurementId (0xfffa)
1315 {
1316  m_cellMeasurementResultList.clear ();
1317 }
1318 
1320 {
1321  m_numberOfIes = 0;
1322  m_headerLength = 0;
1323  m_enb1MeasurementId = 0xfffb;
1324  m_enb2MeasurementId = 0xfffb;
1325  m_cellMeasurementResultList.clear ();
1326 }
1327 
1328 TypeId
1330 {
1331  static TypeId tid = TypeId ("ns3::EpcX2ResourceStatusUpdateHeader")
1332  .SetParent<Header> ()
1333  .AddConstructor<EpcX2ResourceStatusUpdateHeader> ()
1334  ;
1335  return tid;
1336 }
1337 
1338 TypeId
1340 {
1341  return GetTypeId ();
1342 }
1343 
1344 uint32_t
1346 {
1347  return m_headerLength;
1348 }
1349 
1350 void
1352 {
1353  Buffer::Iterator i = start;
1354 
1357 
1358  std::vector <EpcX2Sap::CellMeasurementResultItem>::size_type sz = m_cellMeasurementResultList.size ();
1359  i.WriteHtonU16 (sz); // number of CellMeasurementResultItem
1360 
1361  for (int j = 0; j < (int) sz; j++)
1362  {
1364 
1365  i.WriteHtonU16 (item.sourceCellId);
1368  i.WriteU8 (item.dlS1TnlLoadIndicator);
1369  i.WriteU8 (item.ulS1TnlLoadIndicator);
1370 
1371  i.WriteHtonU16 (item.dlGbrPrbUsage);
1372  i.WriteHtonU16 (item.ulGbrPrbUsage);
1373  i.WriteHtonU16 (item.dlNonGbrPrbUsage);
1374  i.WriteHtonU16 (item.ulNonGbrPrbUsage);
1375  i.WriteHtonU16 (item.dlTotalPrbUsage);
1376  i.WriteHtonU16 (item.ulTotalPrbUsage);
1377 
1382  }
1383 }
1384 
1385 uint32_t
1387 {
1388  Buffer::Iterator i = start;
1389 
1392 
1393  int sz = i.ReadNtohU16 ();
1394  for (int j = 0; j < sz; j++)
1395  {
1397 
1398  item.sourceCellId = i.ReadNtohU16 ();
1403 
1404  item.dlGbrPrbUsage = i.ReadNtohU16 ();
1405  item.ulGbrPrbUsage = i.ReadNtohU16 ();
1406  item.dlNonGbrPrbUsage = i.ReadNtohU16 ();
1407  item.ulNonGbrPrbUsage = i.ReadNtohU16 ();
1408  item.dlTotalPrbUsage = i.ReadNtohU16 ();
1409  item.ulTotalPrbUsage = i.ReadNtohU16 ();
1410 
1415 
1416  m_cellMeasurementResultList.push_back (item);
1417  }
1418 
1419  m_headerLength = 6 + sz * 26;
1420  m_numberOfIes = 3;
1421 
1422  return GetSerializedSize ();
1423 }
1424 
1425 void
1427 {
1428  os << "Enb1MeasurementId = " << m_enb1MeasurementId
1429  << " Enb2MeasurementId = " << m_enb2MeasurementId
1430  << " NumOfCellMeasurementResultItems = " << m_cellMeasurementResultList.size ();
1431 }
1432 
1433 uint16_t
1435 {
1436  return m_enb1MeasurementId;
1437 }
1438 
1439 void
1441 {
1442  m_enb1MeasurementId = enb1MeasurementId;
1443 }
1444 
1445 uint16_t
1447 {
1448  return m_enb2MeasurementId;
1449 }
1450 
1451 void
1453 {
1454  m_enb2MeasurementId = enb2MeasurementId;
1455 }
1456 
1457 std::vector <EpcX2Sap::CellMeasurementResultItem>
1459 {
1461 }
1462 
1463 void
1464 EpcX2ResourceStatusUpdateHeader::SetCellMeasurementResultList (std::vector <EpcX2Sap::CellMeasurementResultItem> cellMeasurementResultList)
1465 {
1466  m_cellMeasurementResultList = cellMeasurementResultList;
1467 
1468  std::vector <EpcX2Sap::CellMeasurementResultItem>::size_type sz = m_cellMeasurementResultList.size ();
1469  m_headerLength += sz * 26;
1470 }
1471 
1472 uint32_t
1474 {
1475  return m_headerLength;
1476 }
1477 
1478 uint32_t
1480 {
1481  return m_numberOfIes;
1482 }
1483 
1484 } // namespace ns3
virtual uint32_t Deserialize(Buffer::Iterator start)
Protocol header serialization and deserialization.
Definition: header.h:42
void SetNumberOfIes(uint32_t numberOfIes)
RelativeNarrowbandTxBand relativeNarrowbandTxBand
Definition: epc-x2-sap.h:159
virtual void Print(std::ostream &os) const
Introspection did not find any typical Config paths.
void WriteHtonU64(uint64_t data)
Definition: buffer.cc:969
uint8_t GetMessageType() const
E-RABs admitted item as it is used in the HANDOVER REQUEST ACKNOWLEDGE message.
Definition: epc-x2-sap.h:75
virtual void Serialize(Buffer::Iterator start) const
uint16_t GetOldEnbUeX2apId() const
void SetNewEnbUeX2apId(uint16_t x2apId)
virtual uint32_t GetSerializedSize(void) const
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:44
void SetOldEnbUeX2apId(uint16_t x2apId)
std::vector< EpcX2Sap::ErabNotAdmittedItem > GetNotAdmittedBearers() const
uint8_t m_procedureCode
Definition: epc-x2-header.h:73
virtual ~EpcX2Header()
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
def start()
Definition: core.py:1482
std::vector< EpcX2Sap::CellInformationItem > m_cellInformationList
void SetCause(uint16_t cause)
uint64_t ReadNtohU64(void)
Definition: buffer.cc:1072
std::vector< EpcX2Sap::CellMeasurementResultItem > GetCellMeasurementResultList() const
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:201
virtual void Serialize(Buffer::Iterator start) const
std::vector< UlInterferenceOverloadIndicationItem > ulInterferenceOverloadIndicationList
Definition: epc-x2-sap.h:157
virtual void Print(std::ostream &os) const
virtual uint32_t Deserialize(Buffer::Iterator start)
virtual void Serialize(Buffer::Iterator start) const
virtual void Serialize(Buffer::Iterator start) const
virtual void Serialize(Buffer::Iterator start) const
std::vector< EpcX2Sap::ErabsSubjectToStatusTransferItem > GetErabsSubjectToStatusTransferList() const
void SetLengthOfIes(uint32_t lengthOfIes)
virtual uint32_t GetSerializedSize(void) const
uint32_t m_numberOfIes
Definition: epc-x2-header.h:76
virtual void Serialize(Buffer::Iterator start) const
uint32_t ReadNtohU32(void)
Definition: buffer.h:977
CompositeAvailCapacity dlCompositeAvailableCapacity
Definition: epc-x2-sap.h:208
Introspection did not find any typical Config paths.
iterator in a Buffer instance
Definition: buffer.h:98
uint64_t GetUeAggregateMaxBitRateUplink() const
std::vector< EpcX2Sap::ErabToBeSetupItem > GetBearers() const
std::vector< EpcX2Sap::CellMeasurementResultItem > m_cellMeasurementResultList
uint64_t gbrUl
Guaranteed Bit Rate (bit/s) in uplink.
Definition: eps-bearer.h:41
virtual void Serialize(Buffer::Iterator start) const
Introspection did not find any typical Config paths.
Definition: epc-x2-header.h:80
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:71
virtual uint32_t GetSerializedSize(void) const
void SetTargetCellId(uint16_t targetCellId)
virtual uint32_t GetSerializedSize(void) const
UlInterferenceOverloadIndicationItem
UL Interference OverloadIndication as it is used in the LOAD INFORMATION message. ...
Definition: epc-x2-sap.h:114
virtual void Print(std::ostream &os) const
static TypeId GetTypeId(void)
void SetUeAggregateMaxBitRateUplink(uint64_t bitRate)
static const uint16_t m_maxPdcpSn
E-RABs subject to status transfer item as it is used in the SN STATUS TRANSFER message.
Definition: epc-x2-sap.h:98
void SetOldEnbUeX2apId(uint16_t x2apId)
GbrQosInformation gbrQosInfo
Definition: eps-bearer.h:90
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
void WriteHtonU16(uint16_t data)
Definition: buffer.h:912
void SetEnb1MeasurementId(uint16_t enb1MeasurementId)
Introspection did not find any typical Config paths.
Introspection did not find any typical Config paths.
uint64_t gbrDl
Guaranteed Bit Rate (bit/s) in downlink.
Definition: eps-bearer.h:40
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
void SetUeAggregateMaxBitRateDownlink(uint64_t bitRate)
std::vector< UlHighInterferenceInformationItem > ulHighInterferenceInformationList
Definition: epc-x2-sap.h:158
uint8_t GetProcedureCode() const
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
uint32_t m_lengthOfIes
Definition: epc-x2-header.h:75
virtual void Print(std::ostream &os) const
std::bitset< m_maxPdcpSn > receiveStatusOfUlPdcpSdus
Definition: epc-x2-sap.h:102
E-RABs to be setup item as it is used in the HANDOVER REQUEST message.
Definition: epc-x2-sap.h:59
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual uint32_t Deserialize(Buffer::Iterator start)
void SetNotAdmittedBearers(std::vector< EpcX2Sap::ErabNotAdmittedItem > bearers)
uint64_t mbrUl
Maximum Bit Rate (bit/s) in uplink.
Definition: eps-bearer.h:43
E-RABs not admitted item as it is used in the HANDOVER REQUEST ACKNOWLEDGE message.
Definition: epc-x2-sap.h:87
void SetProcedureCode(uint8_t procedureCode)
uint8_t m_messageType
Definition: epc-x2-header.h:72
void SetNewEnbUeX2apId(uint16_t x2apId)
void WriteHtonU32(uint32_t data)
Definition: buffer.h:931
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:40
std::vector< EpcX2Sap::CellInformationItem > GetCellInformationList() const
virtual void Print(std::ostream &os) const
virtual void Serialize(Buffer::Iterator start) const
void WriteU8(uint8_t data)
Definition: buffer.h:876
void SetErabsSubjectToStatusTransferList(std::vector< EpcX2Sap::ErabsSubjectToStatusTransferItem > erabs)
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
virtual uint32_t GetSerializedSize(void) const
LoadIndicator
Load Indicator as it is used in the RESOURCE STATUS UPDATE message.
Definition: epc-x2-sap.h:167
std::vector< EpcX2Sap::ErabNotAdmittedItem > m_erabsNotAdmittedList
virtual uint32_t Deserialize(Buffer::Iterator start)
Cell Measurement Result Item as it is used in the RESOURCE STATUS UPDATE message. ...
Definition: epc-x2-sap.h:191
Introspection did not find any typical Config paths.
void SetNewEnbUeX2apId(uint16_t x2apId)
std::vector< EpcX2Sap::ErabAdmittedItem > m_erabsAdmittedList
virtual void Print(std::ostream &os) const
uint8_t ReadU8(void)
Definition: buffer.h:1028
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
void SetEnb2MeasurementId(uint16_t enb2MeasurementId)
Cell Information Item as it is used in the LOAD INFORMATION message.
Definition: epc-x2-sap.h:154
void SetCellInformationList(std::vector< EpcX2Sap::CellInformationItem > cellInformationList)
void SetAdmittedBearers(std::vector< EpcX2Sap::ErabAdmittedItem > bearers)
void SetBearers(std::vector< EpcX2Sap::ErabToBeSetupItem > bearers)
std::vector< EpcX2Sap::ErabAdmittedItem > GetAdmittedBearers() const
uint64_t GetUeAggregateMaxBitRateDownlink() const
void SetOldEnbUeX2apId(uint16_t x2apId)
virtual uint32_t Deserialize(Buffer::Iterator start)
Introspection did not find any typical Config paths.
uint64_t mbrDl
Maximum Bit Rate (bit/s) in downlink.
Definition: eps-bearer.h:42
void SetOldEnbUeX2apId(uint16_t x2apId)
uint16_t ReadNtohU16(void)
Definition: buffer.h:953
std::vector< EpcX2Sap::ErabToBeSetupItem > m_erabsToBeSetupList
virtual uint32_t GetSerializedSize(void) const
UL High Interference Information as it is used in the LOAD INFORMATION message.
Definition: epc-x2-sap.h:126
a unique identifier for an interface.
Definition: type-id.h:51
void SetCriticalityDiagnostics(uint16_t criticalityDiagnostics)
virtual uint32_t GetSerializedSize(void) const
TypeId SetParent(TypeId tid)
Definition: type-id.cc:631
virtual uint32_t Deserialize(Buffer::Iterator start)
Qci
QoS Class Indicator.
Definition: eps-bearer.h:77
std::vector< EpcX2Sap::ErabsSubjectToStatusTransferItem > m_erabsSubjectToStatusTransferList
void SetCellMeasurementResultList(std::vector< EpcX2Sap::CellMeasurementResultItem > cellMeasurementResultList)
AllocationRetentionPriority arp
Definition: eps-bearer.h:91
virtual uint32_t Deserialize(Buffer::Iterator start)
virtual uint32_t GetSerializedSize(void) const
virtual void Print(std::ostream &os) const
void SetMessageType(uint8_t messageType)
virtual uint32_t Deserialize(Buffer::Iterator start)
CompositeAvailCapacity ulCompositeAvailableCapacity
Definition: epc-x2-sap.h:209
virtual void Print(std::ostream &os) const
void SetMmeUeS1apId(uint32_t mmeUeS1apId)