A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
epc-x2-header.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Manuel Requena <manuel.requena@cttc.es>
7 */
8
9#include "epc-x2-header.h"
10
11#include "ns3/log.h"
12
13namespace ns3
14{
15
16NS_LOG_COMPONENT_DEFINE("EpcX2Header");
17
19
21 : m_messageType(0xfa),
22 m_procedureCode(0xfa),
23 m_lengthOfIes(0xfa),
24 m_numberOfIes(0xfa)
25{
26}
27
29{
30 m_messageType = 0xfb;
31 m_procedureCode = 0xfb;
32 m_lengthOfIes = 0xfb;
33 m_numberOfIes = 0xfb;
34}
35
38{
39 static TypeId tid = TypeId("ns3::EpcX2Header")
41 .SetGroupName("Lte")
42 .AddConstructor<EpcX2Header>();
43 return tid;
44}
45
48{
49 return GetTypeId();
50}
51
54{
55 return 7;
56}
57
58void
60{
61 Buffer::Iterator i = start;
62
65
66 i.WriteU8(0x00); // criticality = REJECT
68 i.WriteHtonU16(0);
70}
71
74{
75 Buffer::Iterator i = start;
76
79
80 i.ReadU8();
81 m_lengthOfIes = i.ReadU8() - 3;
82 i.ReadNtohU16();
84
85 return GetSerializedSize();
86}
87
88void
89EpcX2Header::Print(std::ostream& os) const
90{
91 os << "MessageType=" << (uint32_t)m_messageType;
92 os << " ProcedureCode=" << (uint32_t)m_procedureCode;
93 os << " LengthOfIEs=" << (uint32_t)m_lengthOfIes;
94 os << " NumberOfIEs=" << (uint32_t)m_numberOfIes;
95}
96
97uint8_t
99{
100 return m_messageType;
101}
102
103void
104EpcX2Header::SetMessageType(uint8_t messageType)
105{
106 m_messageType = messageType;
107}
108
109uint8_t
111{
112 return m_procedureCode;
113}
114
115void
116EpcX2Header::SetProcedureCode(uint8_t procedureCode)
117{
118 m_procedureCode = procedureCode;
119}
120
121void
123{
124 m_lengthOfIes = lengthOfIes;
125}
126
127void
129{
130 m_numberOfIes = numberOfIes;
131}
132
133/////////////////////////////////////////////////////////////////////
134
136
138 : m_numberOfIes(1 + 1 + 1 + 1),
139 m_headerLength(6 + 5 + 12 + (3 + 4 + 8 + 8 + 4)),
140 m_oldEnbUeX2apId(0xfffa),
141 m_cause(0xfffa),
142 m_targetCellId(0xfffa),
143 m_mmeUeS1apId(0xfffffffa)
144{
145 m_erabsToBeSetupList.clear();
146}
147
149{
150 m_numberOfIes = 0;
151 m_headerLength = 0;
152 m_oldEnbUeX2apId = 0xfffb;
153 m_cause = 0xfffb;
154 m_targetCellId = 0xfffb;
155 m_mmeUeS1apId = 0xfffffffb;
156 m_erabsToBeSetupList.clear();
157}
158
159TypeId
161{
162 static TypeId tid = TypeId("ns3::EpcX2HandoverRequestHeader")
163 .SetParent<Header>()
164 .SetGroupName("Lte")
165 .AddConstructor<EpcX2HandoverRequestHeader>();
166 return tid;
167}
168
169TypeId
174
180
181void
183{
184 Buffer::Iterator i = start;
185
186 i.WriteHtonU16(10); // id = OLD_ENB_UE_X2AP_ID
187 i.WriteU8(0); // criticality = REJECT
188 i.WriteU8(2); // length of OLD_ENB_UE_X2AP_ID
190
191 i.WriteHtonU16(5); // id = CAUSE
192 i.WriteU8(1 << 6); // criticality = IGNORE
193 i.WriteU8(1); // length of CAUSE
194 i.WriteU8(m_cause);
195
196 i.WriteHtonU16(11); // id = TARGET_CELLID
197 i.WriteU8(0); // criticality = REJECT
198 i.WriteU8(8); // length of TARGET_CELLID
199 i.WriteHtonU32(0x123456); // fake PLMN
201
202 i.WriteHtonU16(14); // id = UE_CONTEXT_INFORMATION
203 i.WriteU8(0); // criticality = REJECT
204
208
209 std::vector<EpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size();
210 i.WriteHtonU32(sz); // number of bearers
211 for (int j = 0; j < (int)sz; j++)
212 {
214 i.WriteHtonU16(m_erabsToBeSetupList[j].erabLevelQosParameters.qci);
215 i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.gbrDl);
216 i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.gbrUl);
217 i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.mbrDl);
218 i.WriteHtonU64(m_erabsToBeSetupList[j].erabLevelQosParameters.gbrQosInfo.mbrUl);
219 i.WriteU8(m_erabsToBeSetupList[j].erabLevelQosParameters.arp.priorityLevel);
220 i.WriteU8(m_erabsToBeSetupList[j].erabLevelQosParameters.arp.preemptionCapability);
221 i.WriteU8(m_erabsToBeSetupList[j].erabLevelQosParameters.arp.preemptionVulnerability);
222 i.WriteU8(m_erabsToBeSetupList[j].dlForwarding);
223 i.WriteHtonU32(m_erabsToBeSetupList[j].transportLayerAddress.Get());
225 }
226}
227
230{
231 Buffer::Iterator i = start;
232
233 m_headerLength = 0;
234 m_numberOfIes = 0;
235
236 i.ReadNtohU16();
237 i.ReadU8();
238 i.ReadU8();
240 m_headerLength += 6;
242
243 i.ReadNtohU16();
244 i.ReadU8();
245 i.ReadU8();
246 m_cause = i.ReadU8();
247 m_headerLength += 5;
249
250 i.ReadNtohU16();
251 i.ReadU8();
252 i.ReadU8();
253 i.ReadNtohU32();
254 m_targetCellId = i.ReadNtohU32() >> 4;
255 m_headerLength += 12;
257
258 i.ReadNtohU16();
259 i.ReadU8();
263 int sz = i.ReadNtohU32();
264 m_headerLength += 27;
266
267 for (int j = 0; j < sz; j++)
268 {
270
271 erabItem.erabId = i.ReadNtohU16();
272
281
282 erabItem.dlForwarding = i.ReadU8();
284 erabItem.gtpTeid = i.ReadNtohU32();
285
286 m_erabsToBeSetupList.push_back(erabItem);
287 m_headerLength += 48;
288 }
289
290 return GetSerializedSize();
291}
292
293void
295{
296 os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
297 os << " Cause = " << m_cause;
298 os << " TargetCellId = " << m_targetCellId;
299 os << " MmeUeS1apId = " << m_mmeUeS1apId;
300 os << " UeAggrMaxBitRateDownlink = " << m_ueAggregateMaxBitRateDownlink;
301 os << " UeAggrMaxBitRateUplink = " << m_ueAggregateMaxBitRateUplink;
302 os << " NumOfBearers = " << m_erabsToBeSetupList.size();
303
304 std::vector<EpcX2Sap::ErabToBeSetupItem>::size_type sz = m_erabsToBeSetupList.size();
305 if (sz > 0)
306 {
307 os << " [";
308 }
309 for (int j = 0; j < (int)sz; j++)
310 {
311 os << m_erabsToBeSetupList[j].erabId;
312 if (j < (int)sz - 1)
313 {
314 os << ", ";
315 }
316 else
317 {
318 os << "]";
319 }
320 }
321}
322
323uint16_t
328
329void
334
335uint16_t
337{
338 return m_cause;
339}
340
341void
343{
344 m_cause = cause;
345}
346
347uint16_t
352
353void
355{
356 m_targetCellId = targetCellId;
357}
358
364
365void
367{
368 m_mmeUeS1apId = mmeUeS1apId;
369}
370
371std::vector<EpcX2Sap::ErabToBeSetupItem>
376
377void
378EpcX2HandoverRequestHeader::SetBearers(std::vector<EpcX2Sap::ErabToBeSetupItem> bearers)
379{
380 m_headerLength += 48 * bearers.size();
381 m_erabsToBeSetupList = bearers;
382}
383
384uint64_t
389
390void
395
396uint64_t
401
402void
407
413
419
420/////////////////////////////////////////////////////////////////////
421
423
425 : m_numberOfIes(1 + 1 + 1 + 1),
426 m_headerLength(2 + 2 + 4 + 4),
427 m_oldEnbUeX2apId(0xfffa),
428 m_newEnbUeX2apId(0xfffa)
429{
430}
431
441
442TypeId
444{
445 static TypeId tid = TypeId("ns3::EpcX2HandoverRequestAckHeader")
446 .SetParent<Header>()
447 .SetGroupName("Lte")
448 .AddConstructor<EpcX2HandoverRequestAckHeader>();
449 return tid;
450}
451
452TypeId
457
463
464void
466{
467 Buffer::Iterator i = start;
468
471
472 std::vector<EpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size();
473 i.WriteHtonU32(sz);
474 for (int j = 0; j < (int)sz; j++)
475 {
477 i.WriteHtonU32(m_erabsAdmittedList[j].ulGtpTeid);
478 i.WriteHtonU32(m_erabsAdmittedList[j].dlGtpTeid);
479 }
480
481 std::vector<EpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size();
482 i.WriteHtonU32(sz2);
483 for (int j = 0; j < (int)sz2; j++)
484 {
487 }
488}
489
492{
493 Buffer::Iterator i = start;
494
495 m_headerLength = 0;
496 m_numberOfIes = 0;
497
500 m_headerLength += 4;
501 m_numberOfIes += 2;
502
503 int sz = i.ReadNtohU32();
504 m_headerLength += 4;
506
507 for (int j = 0; j < sz; j++)
508 {
510
511 erabItem.erabId = i.ReadNtohU16();
512 erabItem.ulGtpTeid = i.ReadNtohU32();
513 erabItem.dlGtpTeid = i.ReadNtohU32();
514
515 m_erabsAdmittedList.push_back(erabItem);
516 m_headerLength += 10;
517 }
518
519 sz = i.ReadNtohU32();
520 m_headerLength += 4;
522
523 for (int j = 0; j < sz; j++)
524 {
526
527 erabItem.erabId = i.ReadNtohU16();
528 erabItem.cause = i.ReadNtohU16();
529
530 m_erabsNotAdmittedList.push_back(erabItem);
531 m_headerLength += 4;
532 }
533
534 return GetSerializedSize();
535}
536
537void
539{
540 os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
541 os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
542
543 os << " AdmittedBearers=" << m_erabsAdmittedList.size();
544 std::vector<EpcX2Sap::ErabAdmittedItem>::size_type sz = m_erabsAdmittedList.size();
545 if (sz > 0)
546 {
547 os << " [";
548 }
549 for (int j = 0; j < (int)sz; j++)
550 {
551 os << m_erabsAdmittedList[j].erabId;
552 if (j < (int)sz - 1)
553 {
554 os << ", ";
555 }
556 else
557 {
558 os << "]";
559 }
560 }
561
562 os << " NotAdmittedBearers=" << m_erabsNotAdmittedList.size();
563 std::vector<EpcX2Sap::ErabNotAdmittedItem>::size_type sz2 = m_erabsNotAdmittedList.size();
564 if (sz2 > 0)
565 {
566 os << " [";
567 }
568 for (int j = 0; j < (int)sz2; j++)
569 {
570 os << m_erabsNotAdmittedList[j].erabId;
571 if (j < (int)sz2 - 1)
572 {
573 os << ", ";
574 }
575 else
576 {
577 os << "]";
578 }
579 }
580}
581
582uint16_t
587
588void
593
594uint16_t
599
600void
605
606std::vector<EpcX2Sap::ErabAdmittedItem>
611
612void
613EpcX2HandoverRequestAckHeader::SetAdmittedBearers(std::vector<EpcX2Sap::ErabAdmittedItem> bearers)
614{
615 m_headerLength += 10 * bearers.size();
616 m_erabsAdmittedList = bearers;
617}
618
619std::vector<EpcX2Sap::ErabNotAdmittedItem>
624
625void
627 std::vector<EpcX2Sap::ErabNotAdmittedItem> bearers)
628{
629 m_headerLength += 4 * bearers.size();
630 m_erabsNotAdmittedList = bearers;
631}
632
638
644
645/////////////////////////////////////////////////////////////////////
646
648
650 : m_numberOfIes(1 + 1 + 1),
651 m_headerLength(2 + 2 + 2),
652 m_oldEnbUeX2apId(0xfffa),
653 m_cause(0xfffa),
654 m_criticalityDiagnostics(0xfffa)
655{
656}
657
666
667TypeId
669{
670 static TypeId tid = TypeId("ns3::EpcX2HandoverPreparationFailureHeader")
671 .SetParent<Header>()
672 .SetGroupName("Lte")
673 .AddConstructor<EpcX2HandoverPreparationFailureHeader>();
674 return tid;
675}
676
677TypeId
682
688
689void
698
713
714void
716{
717 os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
718 os << " Cause = " << m_cause;
719 os << " CriticalityDiagnostics = " << m_criticalityDiagnostics;
720}
721
722uint16_t
727
728void
733
734uint16_t
739
740void
742{
743 m_cause = cause;
744}
745
746uint16_t
751
752void
754{
755 m_criticalityDiagnostics = criticalityDiagnostics;
756}
757
763
769
770/////////////////////////////////////////////////////////////////////
771
773
775 : m_numberOfIes(3),
776 m_headerLength(6),
777 m_oldEnbUeX2apId(0xfffa),
778 m_newEnbUeX2apId(0xfffa)
779{
781}
782
791
792TypeId
794{
795 static TypeId tid = TypeId("ns3::EpcX2SnStatusTransferHeader")
796 .SetParent<Header>()
797 .SetGroupName("Lte")
798 .AddConstructor<EpcX2SnStatusTransferHeader>();
799 return tid;
800}
801
802TypeId
807
813
814void
816{
817 Buffer::Iterator i = start;
818
821
822 std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz =
824 i.WriteHtonU16(sz); // number of ErabsSubjectToStatusTransferItems
825
826 for (int j = 0; j < (int)sz; j++)
827 {
829
830 i.WriteHtonU16(item.erabId);
831
832 uint16_t bitsetSize = EpcX2Sap::m_maxPdcpSn / 64;
833 for (int k = 0; k < bitsetSize; k++)
834 {
835 uint64_t statusValue = 0;
836 for (int m = 0; m < 64; m++)
837 {
838 statusValue |= item.receiveStatusOfUlPdcpSdus[64 * k + m] << m;
839 }
840 i.WriteHtonU64(statusValue);
841 }
842
843 i.WriteHtonU16(item.ulPdcpSn);
844 i.WriteHtonU32(item.ulHfn);
845 i.WriteHtonU16(item.dlPdcpSn);
846 i.WriteHtonU32(item.dlHfn);
847 }
848}
849
852{
853 Buffer::Iterator i = start;
854
857 int sz = i.ReadNtohU16();
858
859 m_numberOfIes = 3;
860 m_headerLength = 6 + sz * (14 + (EpcX2Sap::m_maxPdcpSn / 64));
861
862 for (int j = 0; j < sz; j++)
863 {
865 ErabItem.erabId = i.ReadNtohU16();
866
867 uint16_t bitsetSize = EpcX2Sap::m_maxPdcpSn / 64;
868 for (int k = 0; k < bitsetSize; k++)
869 {
870 uint64_t statusValue = i.ReadNtohU64();
871 for (int m = 0; m < 64; m++)
872 {
873 ErabItem.receiveStatusOfUlPdcpSdus[64 * k + m] = (statusValue >> m) & 1;
874 }
875 }
876
877 ErabItem.ulPdcpSn = i.ReadNtohU16();
878 ErabItem.ulHfn = i.ReadNtohU32();
879 ErabItem.dlPdcpSn = i.ReadNtohU16();
880 ErabItem.dlHfn = i.ReadNtohU32();
881
882 m_erabsSubjectToStatusTransferList.push_back(ErabItem);
883 }
884
885 return GetSerializedSize();
886}
887
888void
890{
891 os << "OldEnbUeX2apId = " << m_oldEnbUeX2apId;
892 os << " NewEnbUeX2apId = " << m_newEnbUeX2apId;
893 os << " ErabsSubjectToStatusTransferList size = " << m_erabsSubjectToStatusTransferList.size();
894
895 std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem>::size_type sz =
897 if (sz > 0)
898 {
899 os << " [";
900 }
901 for (int j = 0; j < (int)sz; j++)
902 {
904 if (j < (int)sz - 1)
905 {
906 os << ", ";
907 }
908 else
909 {
910 os << "]";
911 }
912 }
913}
914
915uint16_t
920
921void
926
927uint16_t
932
933void
938
939std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem>
944
945void
947 std::vector<EpcX2Sap::ErabsSubjectToStatusTransferItem> erabs)
948{
949 m_headerLength += erabs.size() * (14 + (EpcX2Sap::m_maxPdcpSn / 8));
951}
952
958
964
965/////////////////////////////////////////////////////////////////////
966
968
970 : m_numberOfIes(1 + 1),
971 m_headerLength(2 + 2),
972 m_oldEnbUeX2apId(0xfffa),
973 m_newEnbUeX2apId(0xfffa)
974{
975}
976
984
985TypeId
987{
988 static TypeId tid = TypeId("ns3::EpcX2UeContextReleaseHeader")
989 .SetParent<Header>()
990 .SetGroupName("Lte")
991 .AddConstructor<EpcX2UeContextReleaseHeader>();
992 return tid;
993}
994
995TypeId
1000
1006
1007void
1015
1028
1029void
1031{
1032 os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
1033 os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
1034}
1035
1036uint16_t
1041
1042void
1044{
1045 m_oldEnbUeX2apId = x2apId;
1046}
1047
1048uint16_t
1053
1054void
1056{
1057 m_newEnbUeX2apId = x2apId;
1058}
1059
1065
1071
1072/////////////////////////////////
1073
1075
1077 : m_numberOfIes(1),
1078 m_headerLength(6)
1079{
1080 m_cellInformationList.clear();
1081}
1082
1089
1090TypeId
1092{
1093 static TypeId tid = TypeId("ns3::EpcX2LoadInformationHeader")
1094 .SetParent<Header>()
1095 .SetGroupName("Lte")
1096 .AddConstructor<EpcX2LoadInformationHeader>();
1097 return tid;
1098}
1099
1100TypeId
1105
1111
1112void
1114{
1115 Buffer::Iterator i = start;
1116
1117 i.WriteHtonU16(6); // id = CELL_INFORMATION
1118 i.WriteU8(1 << 6); // criticality = IGNORE
1119 i.WriteU8(4); // length of CELL_INFORMATION_ID
1120
1121 std::vector<EpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size();
1122 i.WriteHtonU16(sz); // number of cellInformationItems
1123
1124 for (int j = 0; j < (int)sz; j++)
1125 {
1126 i.WriteHtonU16(m_cellInformationList[j].sourceCellId);
1127
1128 std::vector<EpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1129 sz2 = m_cellInformationList[j].ulInterferenceOverloadIndicationList.size();
1130 i.WriteHtonU16(sz2); // number of UlInterferenceOverloadIndicationItem
1131
1132 for (int k = 0; k < (int)sz2; k++)
1133 {
1134 i.WriteU8(m_cellInformationList[j].ulInterferenceOverloadIndicationList[k]);
1135 }
1136
1137 std::vector<EpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1138 sz3 = m_cellInformationList[j].ulHighInterferenceInformationList.size();
1139 i.WriteHtonU16(sz3); // number of UlHighInterferenceInformationItem
1140
1141 for (int k = 0; k < (int)sz3; k++)
1142 {
1143 i.WriteHtonU16(
1144 m_cellInformationList[j].ulHighInterferenceInformationList[k].targetCellId);
1145
1146 std::vector<bool>::size_type sz4;
1147 sz4 = m_cellInformationList[j]
1148 .ulHighInterferenceInformationList[k]
1149 .ulHighInterferenceIndicationList.size();
1150 i.WriteHtonU16(sz4);
1151
1152 for (int m = 0; m < (int)sz4; m++)
1153 {
1155 .ulHighInterferenceInformationList[k]
1156 .ulHighInterferenceIndicationList[m]);
1157 }
1158 }
1159
1160 std::vector<bool>::size_type sz5;
1161 sz5 = m_cellInformationList[j].relativeNarrowbandTxBand.rntpPerPrbList.size();
1162 i.WriteHtonU16(sz5);
1163
1164 for (int k = 0; k < (int)sz5; k++)
1165 {
1166 i.WriteU8(m_cellInformationList[j].relativeNarrowbandTxBand.rntpPerPrbList[k]);
1167 }
1168
1169 i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.rntpThreshold);
1170 i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.antennaPorts);
1171 i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.pB);
1172 i.WriteHtonU16(m_cellInformationList[j].relativeNarrowbandTxBand.pdcchInterferenceImpact);
1173 }
1174}
1175
1178{
1179 Buffer::Iterator i = start;
1180
1181 m_headerLength = 0;
1182 m_numberOfIes = 0;
1183
1184 i.ReadNtohU16();
1185 i.ReadU8();
1186 i.ReadU8();
1187 int sz = i.ReadNtohU16();
1188 m_headerLength += 6;
1189 m_numberOfIes++;
1190
1191 for (int j = 0; j < sz; j++)
1192 {
1193 EpcX2Sap::CellInformationItem cellInfoItem;
1194 cellInfoItem.sourceCellId = i.ReadNtohU16();
1195 m_headerLength += 2;
1196
1197 int sz2 = i.ReadNtohU16();
1198 m_headerLength += 2;
1199 for (int k = 0; k < sz2; k++)
1200 {
1202 cellInfoItem.ulInterferenceOverloadIndicationList.push_back(item);
1203 }
1204 m_headerLength += sz2;
1205
1206 int sz3 = i.ReadNtohU16();
1207 m_headerLength += 2;
1208 for (int k = 0; k < sz3; k++)
1209 {
1211 item.targetCellId = i.ReadNtohU16();
1212 m_headerLength += 2;
1213
1214 int sz4 = i.ReadNtohU16();
1215 m_headerLength += 2;
1216 for (int m = 0; m < sz4; m++)
1217 {
1218 item.ulHighInterferenceIndicationList.push_back(i.ReadU8());
1219 }
1220 m_headerLength += sz4;
1221
1222 cellInfoItem.ulHighInterferenceInformationList.push_back(item);
1223 }
1224
1225 int sz5 = i.ReadNtohU16();
1226 m_headerLength += 2;
1227 for (int k = 0; k < sz5; k++)
1228 {
1229 cellInfoItem.relativeNarrowbandTxBand.rntpPerPrbList.push_back(i.ReadU8());
1230 }
1231 m_headerLength += sz5;
1232
1235 cellInfoItem.relativeNarrowbandTxBand.pB = i.ReadNtohU16();
1237 m_headerLength += 8;
1238
1239 m_cellInformationList.push_back(cellInfoItem);
1240 }
1241
1242 return GetSerializedSize();
1243}
1244
1245void
1247{
1248 os << "NumOfCellInformationItems=" << m_cellInformationList.size();
1249}
1250
1251std::vector<EpcX2Sap::CellInformationItem>
1256
1257void
1259 std::vector<EpcX2Sap::CellInformationItem> cellInformationList)
1260{
1261 m_cellInformationList = cellInformationList;
1262 m_headerLength += 2;
1263
1264 std::vector<EpcX2Sap::CellInformationItem>::size_type sz = m_cellInformationList.size();
1265 for (int j = 0; j < (int)sz; j++)
1266 {
1267 m_headerLength += 2;
1268
1269 std::vector<EpcX2Sap::UlInterferenceOverloadIndicationItem>::size_type sz2;
1270 sz2 = m_cellInformationList[j].ulInterferenceOverloadIndicationList.size();
1271 m_headerLength += 2 + sz2;
1272
1273 std::vector<EpcX2Sap::UlHighInterferenceInformationItem>::size_type sz3;
1274 sz3 = m_cellInformationList[j].ulHighInterferenceInformationList.size();
1275 m_headerLength += 2;
1276
1277 for (int k = 0; k < (int)sz3; k++)
1278 {
1279 std::vector<bool>::size_type sz4;
1280 sz4 = m_cellInformationList[j]
1281 .ulHighInterferenceInformationList[k]
1282 .ulHighInterferenceIndicationList.size();
1283 m_headerLength += 2 + 2 + sz4;
1284 }
1285
1286 std::vector<bool>::size_type sz5;
1287 sz5 = m_cellInformationList[j].relativeNarrowbandTxBand.rntpPerPrbList.size();
1288 m_headerLength += 2 + sz5 + 8;
1289 }
1290}
1291
1297
1303
1304////////////////
1305
1307
1309 : m_numberOfIes(3),
1310 m_headerLength(6),
1311 m_enb1MeasurementId(0xfffa),
1312 m_enb2MeasurementId(0xfffa)
1313{
1315}
1316
1325
1326TypeId
1328{
1329 static TypeId tid = TypeId("ns3::EpcX2ResourceStatusUpdateHeader")
1330 .SetParent<Header>()
1331 .SetGroupName("Lte")
1332 .AddConstructor<EpcX2ResourceStatusUpdateHeader>();
1333 return tid;
1334}
1335
1336TypeId
1341
1347
1348void
1350{
1351 Buffer::Iterator i = start;
1352
1355
1356 std::vector<EpcX2Sap::CellMeasurementResultItem>::size_type sz =
1358 i.WriteHtonU16(sz); // number of CellMeasurementResultItem
1359
1360 for (int j = 0; j < (int)sz; j++)
1361 {
1363
1364 i.WriteHtonU16(item.sourceCellId);
1369
1376
1381 }
1382}
1383
1423
1424void
1426{
1427 os << "Enb1MeasurementId = " << m_enb1MeasurementId
1428 << " Enb2MeasurementId = " << m_enb2MeasurementId
1429 << " NumOfCellMeasurementResultItems = " << m_cellMeasurementResultList.size();
1430}
1431
1432uint16_t
1437
1438void
1440{
1441 m_enb1MeasurementId = enb1MeasurementId;
1442}
1443
1444uint16_t
1449
1450void
1452{
1453 m_enb2MeasurementId = enb2MeasurementId;
1454}
1455
1456std::vector<EpcX2Sap::CellMeasurementResultItem>
1461
1462void
1464 std::vector<EpcX2Sap::CellMeasurementResultItem> cellMeasurementResultList)
1465{
1466 m_cellMeasurementResultList = cellMeasurementResultList;
1467
1468 std::vector<EpcX2Sap::CellMeasurementResultItem>::size_type sz =
1470 m_headerLength += sz * 26;
1471}
1472
1478
1484
1485///////////////////////////////////////////////////////////////////////////////
1486
1488
1490 : m_numberOfIes(3),
1491 m_headerLength(6),
1492 m_oldEnbUeX2apId(0xfffa),
1493 m_newEnbUeX2apId(0xfffa),
1494 m_cause(0xfffa)
1495{
1496}
1497
1499{
1500 m_numberOfIes = 0;
1501 m_headerLength = 0;
1502 m_oldEnbUeX2apId = 0xfffb;
1503 m_newEnbUeX2apId = 0xfffb;
1504 m_cause = 0xfffb;
1505}
1506
1507TypeId
1509{
1510 static TypeId tid = TypeId("ns3::EpcX2HandoverCancelHeader")
1511 .SetParent<Header>()
1512 .SetGroupName("Lte")
1513 .AddConstructor<EpcX2HandoverCancelHeader>();
1514 return tid;
1515}
1516
1517TypeId
1522
1528
1529void
1538
1541{
1542 Buffer::Iterator i = start;
1543
1546 m_cause = i.ReadNtohU16();
1547 m_numberOfIes = 3;
1548 m_headerLength = 6;
1549
1550 return GetSerializedSize();
1551}
1552
1553void
1555{
1556 os << "OldEnbUeX2apId=" << m_oldEnbUeX2apId;
1557 os << " NewEnbUeX2apId=" << m_newEnbUeX2apId;
1558 os << " Cause = " << m_cause;
1559}
1560
1561uint16_t
1566
1567void
1569{
1570 m_oldEnbUeX2apId = x2apId;
1571}
1572
1573uint16_t
1578
1579void
1581{
1582 m_newEnbUeX2apId = x2apId;
1583}
1584
1585uint16_t
1587{
1588 return m_cause;
1589}
1590
1591void
1593{
1594 m_cause = cause;
1595}
1596
1602
1608
1609} // namespace ns3
iterator in a Buffer instance
Definition buffer.h:89
void WriteHtonU64(uint64_t data)
Definition buffer.cc:923
uint64_t ReadNtohU64()
Definition buffer.cc:1030
void WriteU8(uint8_t data)
Definition buffer.h:870
void WriteHtonU16(uint16_t data)
Definition buffer.h:904
uint32_t ReadNtohU32()
Definition buffer.h:967
void WriteHtonU32(uint32_t data)
Definition buffer.h:922
uint16_t ReadNtohU16()
Definition buffer.h:943
EpcX2HandoverCancelHeader.
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint16_t m_newEnbUeX2apId
new ENB UE X2 AP ID
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
uint32_t Deserialize(Buffer::Iterator start) override
uint32_t m_headerLength
header length
void SetCause(uint16_t cause)
Set cause function.
void Serialize(Buffer::Iterator start) const override
uint16_t GetCause() const
Get cause function.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void Print(std::ostream &os) const override
uint32_t GetSerializedSize() const override
uint32_t m_numberOfIes
number of IEs
static TypeId GetTypeId()
Get the type ID.
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
EpcX2HandoverPreparationFailureHeader.
void SetCriticalityDiagnostics(uint16_t criticalityDiagnostics)
Set criticality diagnostics function.
uint32_t Deserialize(Buffer::Iterator start) override
void SetCause(uint16_t cause)
Set cause function.
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
void Serialize(Buffer::Iterator start) const override
static TypeId GetTypeId()
Get the type ID.
uint16_t GetCause() const
Get cause function.
uint16_t m_criticalityDiagnostics
criticality diagnostics
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint16_t GetCriticalityDiagnostics() const
Get criticality diagnostics function.
void Print(std::ostream &os) const override
uint32_t GetSerializedSize() const override
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
Get number of IEs function.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
EpcX2HandoverRequestAckHeader.
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
uint32_t m_headerLength
header length
uint32_t GetLengthOfIes() const
Get length of IEs function.
std::vector< EpcX2Sap::ErabNotAdmittedItem > GetNotAdmittedBearers() const
Get not admitted bearers function.
uint32_t Deserialize(Buffer::Iterator start) override
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
uint16_t m_newEnbUeX2apId
new ENB UE X2 AP ID
uint32_t m_numberOfIes
number of IEs
static TypeId GetTypeId()
Get the type ID.
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
std::vector< EpcX2Sap::ErabAdmittedItem > GetAdmittedBearers() const
Get admittied bearers function.
void SetNotAdmittedBearers(std::vector< EpcX2Sap::ErabNotAdmittedItem > bearers)
Set not admitted bearers function.
uint32_t GetSerializedSize() const override
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
std::vector< EpcX2Sap::ErabAdmittedItem > m_erabsAdmittedList
ERABs admitted list.
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
std::vector< EpcX2Sap::ErabNotAdmittedItem > m_erabsNotAdmittedList
ERABs not admitted list.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetAdmittedBearers(std::vector< EpcX2Sap::ErabAdmittedItem > bearers)
Set admitted bearers function.
void Print(std::ostream &os) const override
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void Serialize(Buffer::Iterator start) const override
EpcX2HandoverRequestHeader.
uint16_t GetCause() const
Get cause function.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void SetCause(uint16_t cause)
Set cause function.
uint32_t m_mmeUeS1apId
MME UE S1 AP ID.
std::vector< EpcX2Sap::ErabToBeSetupItem > m_erabsToBeSetupList
ERAB to be setup list.
void SetMmeUeS1apId(uint32_t mmeUeS1apId)
Set MME UE S1 AP ID function.
uint32_t GetMmeUeS1apId() const
Get MME UE S1 AP ID function.
void Serialize(Buffer::Iterator start) const override
void SetTargetCellId(uint16_t targetCellId)
Set target cell id function.
void Print(std::ostream &os) const override
uint64_t m_ueAggregateMaxBitRateUplink
aggregate max bit rate uplink
uint32_t m_headerLength
header length
void SetUeAggregateMaxBitRateUplink(uint64_t bitRate)
Set UE Aggregate Max Bit Rate Uplik function.
uint64_t GetUeAggregateMaxBitRateUplink() const
Get UE Aggregate Max Bit Rate Uplik function.
uint16_t GetTargetCellId() const
Get target cell id function.
void SetBearers(std::vector< EpcX2Sap::ErabToBeSetupItem > bearers)
Set bearers function.
uint64_t GetUeAggregateMaxBitRateDownlink() const
Get UE Aggregate Max Bit Rate Downlink function.
void SetUeAggregateMaxBitRateDownlink(uint64_t bitRate)
Set UE Aggregate Max Bit Rate Downlink function.
uint32_t m_numberOfIes
number of IEs
static TypeId GetTypeId()
Get the type ID.
uint16_t m_targetCellId
target cell ID
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB X2 AP ID function.
uint32_t GetNumberOfIes() const
Get number of IEs.
uint16_t m_oldEnbUeX2apId
old ENB UE X1 AP ID
uint16_t GetOldEnbUeX2apId() const
Get old ENB X2 AP ID function.
uint32_t GetLengthOfIes() const
Get length of IEs.
std::vector< EpcX2Sap::ErabToBeSetupItem > GetBearers() const
Get bearers function.
uint32_t GetSerializedSize() const override
uint64_t m_ueAggregateMaxBitRateDownlink
aggregate max bit rate downlink
uint32_t Deserialize(Buffer::Iterator start) override
static TypeId GetTypeId()
Get the type ID.
void SetLengthOfIes(uint32_t lengthOfIes)
Set length of IEs function.
void Print(std::ostream &os) const override
uint8_t m_messageType
message type
uint32_t Deserialize(Buffer::Iterator start) override
void SetProcedureCode(uint8_t procedureCode)
Set procedure code function.
uint8_t GetProcedureCode() const
Get procedure code function.
uint32_t GetSerializedSize() const override
void Serialize(Buffer::Iterator start) const override
uint32_t m_numberOfIes
number of IEs
uint8_t m_procedureCode
procedure code
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void SetNumberOfIes(uint32_t numberOfIes)
Set number of IEs function.
uint32_t m_lengthOfIes
length of IEs
uint8_t GetMessageType() const
Get message type function.
~EpcX2Header() override
void SetMessageType(uint8_t messageType)
Set message type function.
EpcX2LoadInformationHeader.
uint32_t m_headerLength
length of IEs
void Print(std::ostream &os) const override
std::vector< EpcX2Sap::CellInformationItem > GetCellInformationList() const
Get cell information list function.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
void Serialize(Buffer::Iterator start) const override
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetCellInformationList(std::vector< EpcX2Sap::CellInformationItem > cellInformationList)
Set cell information list function.
std::vector< EpcX2Sap::CellInformationItem > m_cellInformationList
cell information list
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint32_t GetSerializedSize() const override
uint32_t Deserialize(Buffer::Iterator start) override
uint32_t m_numberOfIes
number of IEs
static TypeId GetTypeId()
Get the type ID.
EpcX2ResourceStatusUpdateHeader.
uint16_t m_enb1MeasurementId
ENB1 measurement.
uint32_t Deserialize(Buffer::Iterator start) override
uint16_t m_enb2MeasurementId
ENB2 measurement.
void SetEnb2MeasurementId(uint16_t enb2MeasurementId)
Set ENB2 measurement ID function.
void SetEnb1MeasurementId(uint16_t enb1MeasurementId)
Set ENB1 measurement ID function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void Print(std::ostream &os) const override
uint16_t GetEnb2MeasurementId() const
Get ENB2 measurement ID function.
std::vector< EpcX2Sap::CellMeasurementResultItem > GetCellMeasurementResultList() const
Get cell measurement results list function.
static TypeId GetTypeId()
Get the type ID.
std::vector< EpcX2Sap::CellMeasurementResultItem > m_cellMeasurementResultList
cell measurement result list
void SetCellMeasurementResultList(std::vector< EpcX2Sap::CellMeasurementResultItem > cellMeasurementResultList)
Set cell measurement results list function.
uint16_t GetEnb1MeasurementId() const
Get ENB1 measurement ID function.
void Serialize(Buffer::Iterator start) const override
uint32_t GetSerializedSize() const override
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:87
UlInterferenceOverloadIndicationItem
UL Interference OverloadIndication as it is used in the LOAD INFORMATION message.
Definition epc-x2-sap.h:106
LoadIndicator
Load Indicator as it is used in the RESOURCE STATUS UPDATE message.
Definition epc-x2-sap.h:162
EpcX2SnStatusTransferHeader.
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
static TypeId GetTypeId()
Get the type ID.
uint32_t Deserialize(Buffer::Iterator start) override
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetErabsSubjectToStatusTransferList(std::vector< EpcX2Sap::ErabsSubjectToStatusTransferItem > erabs)
Set ERABs subject to status transfer list function.
std::vector< EpcX2Sap::ErabsSubjectToStatusTransferItem > GetErabsSubjectToStatusTransferList() const
Get ERABs subject to status transfer list function.
void Serialize(Buffer::Iterator start) const override
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
std::vector< EpcX2Sap::ErabsSubjectToStatusTransferItem > m_erabsSubjectToStatusTransferList
ERABs subject to status transfer list.
uint32_t m_headerLength
header length
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint32_t GetSerializedSize() const override
uint16_t m_newEnbUeX2apId
new ENB UE X2 AP ID
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint32_t m_numberOfIes
number of IEs
void Print(std::ostream &os) const override
EpcX2UeContextReleaseHeader.
uint16_t m_newEnbUeX2apId
new ENB UE X2 AP ID
uint32_t Deserialize(Buffer::Iterator start) override
static TypeId GetTypeId()
Get the type ID.
uint32_t m_headerLength
header length
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
void Serialize(Buffer::Iterator start) const override
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
uint32_t GetSerializedSize() const override
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
Set length of IEs function.
void Print(std::ostream &os) const override
uint32_t m_numberOfIes
number of IEs
uint16_t m_oldEnbUeX2apId
old ENB UE X2 AP ID
This class contains the specification of EPS Bearers.
Definition eps-bearer.h:80
AllocationRetentionPriority arp
allocation retention priority
Definition eps-bearer.h:143
GbrQosInformation gbrQosInfo
GBR QOS information.
Definition eps-bearer.h:142
Qci
QoS Class Indicator.
Definition eps-bearer.h:95
Protocol header serialization and deserialization.
Definition header.h:33
Ipv4 addresses are stored in host order in this class.
a unique identifier for an interface.
Definition type-id.h:48
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition type-id.cc:1001
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition log.h:191
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition object-base.h:35
Every class exported by the ns3 library is enclosed in the ns3 namespace.
bool preemptionVulnerability
true if bearer can be preempted by others
Definition eps-bearer.h:49
bool preemptionCapability
true if bearer can preempt others
Definition eps-bearer.h:48
uint8_t priorityLevel
1-15; 1 = highest
Definition eps-bearer.h:47
Cell Information Item as it is used in the LOAD INFORMATION message.
Definition epc-x2-sap.h:147
uint16_t sourceCellId
source cell ID
Definition epc-x2-sap.h:148
std::vector< UlHighInterferenceInformationItem > ulHighInterferenceInformationList
UL high interference information list.
Definition epc-x2-sap.h:152
RelativeNarrowbandTxBand relativeNarrowbandTxBand
relative narrow transmit band
Definition epc-x2-sap.h:153
std::vector< UlInterferenceOverloadIndicationItem > ulInterferenceOverloadIndicationList
UL interference overload indication list.
Definition epc-x2-sap.h:150
Cell Measurement Result Item as it is used in the RESOURCE STATUS UPDATE message.
Definition epc-x2-sap.h:186
uint16_t ulTotalPrbUsage
UL Total PRB usage.
Definition epc-x2-sap.h:200
LoadIndicator ulHardwareLoadIndicator
UL hardware load indicator.
Definition epc-x2-sap.h:190
LoadIndicator dlHardwareLoadIndicator
DL hardware load indicator.
Definition epc-x2-sap.h:189
uint16_t ulGbrPrbUsage
UL GBR PRB usage.
Definition epc-x2-sap.h:196
uint16_t dlTotalPrbUsage
DL Total PRB usage.
Definition epc-x2-sap.h:199
LoadIndicator dlS1TnlLoadIndicator
DL S1 TNL load indicator.
Definition epc-x2-sap.h:192
uint16_t ulNonGbrPrbUsage
UL Non GBR PRB usage.
Definition epc-x2-sap.h:198
CompositeAvailCapacity dlCompositeAvailableCapacity
DL composite available capacity.
Definition epc-x2-sap.h:202
CompositeAvailCapacity ulCompositeAvailableCapacity
UL composite available capacity.
Definition epc-x2-sap.h:203
uint16_t dlGbrPrbUsage
DL GBR PRB usage.
Definition epc-x2-sap.h:195
LoadIndicator ulS1TnlLoadIndicator
UL S1 TNL load indicator.
Definition epc-x2-sap.h:193
uint16_t dlNonGbrPrbUsage
DL Non GBR PRB usage.
Definition epc-x2-sap.h:197
uint16_t cellCapacityClassValue
cell capacity class value
Definition epc-x2-sap.h:176
uint16_t capacityValue
capacity value
Definition epc-x2-sap.h:177
E-RABs admitted item as it is used in the HANDOVER REQUEST ACKNOWLEDGE message.
Definition epc-x2-sap.h:65
uint32_t dlGtpTeid
downlink GTP TEID
Definition epc-x2-sap.h:68
uint32_t ulGtpTeid
uplink GTP TEID
Definition epc-x2-sap.h:67
E-RABs not admitted item as it is used in the HANDOVER REQUEST ACKNOWLEDGE message.
Definition epc-x2-sap.h:77
E-RABs to be setup item as it is used in the HANDOVER REQUEST message.
Definition epc-x2-sap.h:49
bool dlForwarding
DL forwarding.
Definition epc-x2-sap.h:52
Ipv4Address transportLayerAddress
transport layer address
Definition epc-x2-sap.h:53
EpsBearer erabLevelQosParameters
E-RAB level QOS parameters.
Definition epc-x2-sap.h:51
ErabsSubjectToStatusTransferItem structure.
Definition epc-x2-sap.h:91
std::bitset< m_maxPdcpSn > receiveStatusOfUlPdcpSdus
receive status of UL PDCP SDUs
Definition epc-x2-sap.h:93
int16_t rntpThreshold
RNTP threshold.
Definition epc-x2-sap.h:135
std::vector< bool > rntpPerPrbList
RNTP per prb list.
Definition epc-x2-sap.h:134
uint16_t pdcchInterferenceImpact
PDC channel interference list.
Definition epc-x2-sap.h:138
UL High Interference Information as it is used in the LOAD INFORMATION message.
Definition epc-x2-sap.h:118
std::vector< bool > ulHighInterferenceIndicationList
UL high interference indication list.
Definition epc-x2-sap.h:121
uint64_t gbrDl
Guaranteed Bit Rate (bit/s) in downlink.
Definition eps-bearer.h:31
uint64_t gbrUl
Guaranteed Bit Rate (bit/s) in uplink.
Definition eps-bearer.h:32
uint64_t mbrDl
Maximum Bit Rate (bit/s) in downlink.
Definition eps-bearer.h:33
uint64_t mbrUl
Maximum Bit Rate (bit/s) in uplink.
Definition eps-bearer.h:34