A Discrete-Event Network Simulator
API
epc-x2.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/inet-socket-address.h"
23#include "ns3/packet.h"
24#include "ns3/node.h"
25#include "ns3/epc-gtpu-header.h"
26
27#include "ns3/epc-x2-header.h"
28#include "ns3/epc-x2.h"
29
30namespace ns3 {
31
33
34X2IfaceInfo::X2IfaceInfo (Ipv4Address remoteIpAddr, Ptr<Socket> localCtrlPlaneSocket, Ptr<Socket> localUserPlaneSocket)
35{
36 m_remoteIpAddr = remoteIpAddr;
37 m_localCtrlPlaneSocket = localCtrlPlaneSocket;
38 m_localUserPlaneSocket = localUserPlaneSocket;
39}
40
42{
45}
46
49{
50 NS_LOG_FUNCTION (this);
54 return *this;
55}
56
58
59X2CellInfo::X2CellInfo (std::vector<uint16_t> localCellIds, std::vector<uint16_t> remoteCellIds) :
60 m_localCellIds {localCellIds},
61 m_remoteCellIds {remoteCellIds}
62{
63}
64
66{
67}
68
71{
72 NS_LOG_FUNCTION (this);
75 return *this;
76}
77
79
81
83 : m_x2cUdpPort (4444),
84 m_x2uUdpPort (2152)
85{
86 NS_LOG_FUNCTION (this);
87
89}
90
92{
93 NS_LOG_FUNCTION (this);
94}
95
96void
98{
99 NS_LOG_FUNCTION (this);
100
101 m_x2InterfaceSockets.clear ();
102 m_x2InterfaceCellIds.clear ();
103 delete m_x2SapProvider;
104}
105
106TypeId
108{
109 static TypeId tid = TypeId ("ns3::EpcX2")
110 .SetParent<Object> ()
111 .SetGroupName("Lte");
112 return tid;
113}
114
115void
117{
118 NS_LOG_FUNCTION (this << s);
119 m_x2SapUser = s;
120}
121
124{
125 NS_LOG_FUNCTION (this);
126 return m_x2SapProvider;
127}
128
129
130void
131EpcX2::AddX2Interface (uint16_t localCellId, Ipv4Address localX2Address, std::vector<uint16_t> remoteCellIds, Ipv4Address remoteX2Address)
132{
133 uint16_t remoteCellId = remoteCellIds.at (0);
134 NS_LOG_FUNCTION (this << localCellId << localX2Address << remoteCellId << remoteX2Address);
135
136 int retval;
137
138 // Get local eNB where this X2 entity belongs to
139 Ptr<Node> localEnb = GetObject<Node> ();
140
141 // Create X2-C socket for the local eNB
142 Ptr<Socket> localX2cSocket = Socket::CreateSocket (localEnb, TypeId::LookupByName ("ns3::UdpSocketFactory"));
143 retval = localX2cSocket->Bind (InetSocketAddress (localX2Address, m_x2cUdpPort));
144 NS_ASSERT (retval == 0);
145 localX2cSocket->SetRecvCallback (MakeCallback (&EpcX2::RecvFromX2cSocket, this));
146
147 // Create X2-U socket for the local eNB
148 Ptr<Socket> localX2uSocket = Socket::CreateSocket (localEnb, TypeId::LookupByName ("ns3::UdpSocketFactory"));
149 retval = localX2uSocket->Bind (InetSocketAddress (localX2Address, m_x2uUdpPort));
150 NS_ASSERT (retval == 0);
151 localX2uSocket->SetRecvCallback (MakeCallback (&EpcX2::RecvFromX2uSocket, this));
152
153 std::vector<uint16_t> localCellIds;
154 localCellIds.push_back (localCellId);
155
156 NS_ASSERT_MSG (m_x2InterfaceSockets.find (remoteCellId) == m_x2InterfaceSockets.end (),
157 "Mapping for remoteCellId = " << remoteCellId << " is already known");
158 for (uint16_t remoteCellId: remoteCellIds)
159 {
160 m_x2InterfaceSockets [remoteCellId] = Create<X2IfaceInfo> (remoteX2Address, localX2cSocket, localX2uSocket);
161 }
162
163 NS_ASSERT_MSG (m_x2InterfaceCellIds.find (localX2cSocket) == m_x2InterfaceCellIds.end (),
164 "Mapping for control plane localSocket = " << localX2cSocket << " is already known");
165 m_x2InterfaceCellIds [localX2cSocket] = Create<X2CellInfo> (localCellIds, remoteCellIds);
166
167 NS_ASSERT_MSG (m_x2InterfaceCellIds.find (localX2uSocket) == m_x2InterfaceCellIds.end (),
168 "Mapping for data plane localSocket = " << localX2uSocket << " is already known");
169 m_x2InterfaceCellIds [localX2uSocket] = Create<X2CellInfo> (localCellIds, remoteCellIds);
170}
171
172
173void
175{
176 NS_LOG_FUNCTION (this << socket);
177
178 NS_LOG_LOGIC ("Recv X2 message: from Socket");
179 Ptr<Packet> packet = socket->Recv ();
180 NS_LOG_LOGIC ("packetLen = " << packet->GetSize ());
181
183 "Missing infos of local and remote CellId");
184 Ptr<X2CellInfo> cellsInfo = m_x2InterfaceCellIds [socket];
185
186 EpcX2Header x2Header;
187 packet->RemoveHeader (x2Header);
188
189 NS_LOG_LOGIC ("X2 header: " << x2Header);
190
191 uint8_t messageType = x2Header.GetMessageType ();
192 uint8_t procedureCode = x2Header.GetProcedureCode ();
193
194 if (procedureCode == EpcX2Header::HandoverPreparation)
195 {
196 if (messageType == EpcX2Header::InitiatingMessage)
197 {
198 NS_LOG_LOGIC ("Recv X2 message: HANDOVER REQUEST");
199
200 EpcX2HandoverRequestHeader x2HoReqHeader;
201 packet->RemoveHeader (x2HoReqHeader);
202
203 NS_LOG_INFO ("X2 HandoverRequest header: " << x2HoReqHeader);
204
206 params.oldEnbUeX2apId = x2HoReqHeader.GetOldEnbUeX2apId ();
207 params.cause = x2HoReqHeader.GetCause ();
208 params.sourceCellId = cellsInfo->m_remoteCellIds.at (0);
209 params.targetCellId = x2HoReqHeader.GetTargetCellId ();
210 params.mmeUeS1apId = x2HoReqHeader.GetMmeUeS1apId ();
213 params.bearers = x2HoReqHeader.GetBearers ();
214 params.rrcContext = packet;
215
216 NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
217 NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
218 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
219 NS_LOG_LOGIC ("mmeUeS1apId = " << params.mmeUeS1apId);
220 NS_LOG_LOGIC ("cellsInfo->m_localCellId = " << cellsInfo->m_localCellIds.at (0));
221
223 }
224 else if (messageType == EpcX2Header::SuccessfulOutcome)
225 {
226 NS_LOG_LOGIC ("Recv X2 message: HANDOVER REQUEST ACK");
227
228 EpcX2HandoverRequestAckHeader x2HoReqAckHeader;
229 packet->RemoveHeader (x2HoReqAckHeader);
230
231 NS_LOG_INFO ("X2 HandoverRequestAck header: " << x2HoReqAckHeader);
232
234 params.oldEnbUeX2apId = x2HoReqAckHeader.GetOldEnbUeX2apId ();
235 params.newEnbUeX2apId = x2HoReqAckHeader.GetNewEnbUeX2apId ();
236 params.sourceCellId = cellsInfo->m_localCellIds.at (0);
237 params.targetCellId = cellsInfo->m_remoteCellIds.at (0);
238 params.admittedBearers = x2HoReqAckHeader.GetAdmittedBearers ();
239 params.notAdmittedBearers = x2HoReqAckHeader.GetNotAdmittedBearers ();
240 params.rrcContext = packet;
241
242 NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
243 NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
244 NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
245 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
246
248 }
249 else // messageType == EpcX2Header::UnsuccessfulOutcome
250 {
251 NS_LOG_LOGIC ("Recv X2 message: HANDOVER PREPARATION FAILURE");
252
253 EpcX2HandoverPreparationFailureHeader x2HoPrepFailHeader;
254 packet->RemoveHeader (x2HoPrepFailHeader);
255
256 NS_LOG_INFO ("X2 HandoverPreparationFailure header: " << x2HoPrepFailHeader);
257
259 params.oldEnbUeX2apId = x2HoPrepFailHeader.GetOldEnbUeX2apId ();
260 params.sourceCellId = cellsInfo->m_localCellIds.at (0);
261 params.targetCellId = cellsInfo->m_remoteCellIds.at (0);
262 params.cause = x2HoPrepFailHeader.GetCause ();
263 params.criticalityDiagnostics = x2HoPrepFailHeader.GetCriticalityDiagnostics ();
264
265 NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
266 NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
267 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
268 NS_LOG_LOGIC ("cause = " << params.cause);
269 NS_LOG_LOGIC ("criticalityDiagnostics = " << params.criticalityDiagnostics);
270
272 }
273 }
274 else if (procedureCode == EpcX2Header::LoadIndication)
275 {
276 if (messageType == EpcX2Header::InitiatingMessage)
277 {
278 NS_LOG_LOGIC ("Recv X2 message: LOAD INFORMATION");
279
280 EpcX2LoadInformationHeader x2LoadInfoHeader;
281 packet->RemoveHeader (x2LoadInfoHeader);
282
283 NS_LOG_INFO ("X2 LoadInformation header: " << x2LoadInfoHeader);
284
286 params.cellInformationList = x2LoadInfoHeader.GetCellInformationList ();
287
288 NS_LOG_LOGIC ("cellInformationList size = " << params.cellInformationList.size ());
289
291 }
292 }
293 else if (procedureCode == EpcX2Header::SnStatusTransfer)
294 {
295 if (messageType == EpcX2Header::InitiatingMessage)
296 {
297 NS_LOG_LOGIC ("Recv X2 message: SN STATUS TRANSFER");
298
299 EpcX2SnStatusTransferHeader x2SnStatusXferHeader;
300 packet->RemoveHeader (x2SnStatusXferHeader);
301
302 NS_LOG_INFO ("X2 SnStatusTransfer header: " << x2SnStatusXferHeader);
303
305 params.oldEnbUeX2apId = x2SnStatusXferHeader.GetOldEnbUeX2apId ();
306 params.newEnbUeX2apId = x2SnStatusXferHeader.GetNewEnbUeX2apId ();
307 params.sourceCellId = cellsInfo->m_remoteCellIds.at (0);
308 params.targetCellId = cellsInfo->m_localCellIds.at (0);
310
311 NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
312 NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
313 NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
314 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
315 NS_LOG_LOGIC ("erabsList size = " << params.erabsSubjectToStatusTransferList.size ());
316
318 }
319 }
320 else if (procedureCode == EpcX2Header::UeContextRelease)
321 {
322 if (messageType == EpcX2Header::InitiatingMessage)
323 {
324 NS_LOG_LOGIC ("Recv X2 message: UE CONTEXT RELEASE");
325
326 EpcX2UeContextReleaseHeader x2UeCtxReleaseHeader;
327 packet->RemoveHeader (x2UeCtxReleaseHeader);
328
329 NS_LOG_INFO ("X2 UeContextRelease header: " << x2UeCtxReleaseHeader);
330
332 params.oldEnbUeX2apId = x2UeCtxReleaseHeader.GetOldEnbUeX2apId ();
333 params.newEnbUeX2apId = x2UeCtxReleaseHeader.GetNewEnbUeX2apId ();
334
335 NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
336 NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
337
339 }
340 }
341 else if (procedureCode == EpcX2Header::ResourceStatusReporting)
342 {
343 if (messageType == EpcX2Header::InitiatingMessage)
344 {
345 NS_LOG_LOGIC ("Recv X2 message: RESOURCE STATUS UPDATE");
346
347 EpcX2ResourceStatusUpdateHeader x2ResStatUpdHeader;
348 packet->RemoveHeader (x2ResStatUpdHeader);
349
350 NS_LOG_INFO ("X2 ResourceStatusUpdate header: " << x2ResStatUpdHeader);
351
353 params.targetCellId = 0;
354 params.enb1MeasurementId = x2ResStatUpdHeader.GetEnb1MeasurementId ();
355 params.enb2MeasurementId = x2ResStatUpdHeader.GetEnb2MeasurementId ();
356 params.cellMeasurementResultList = x2ResStatUpdHeader.GetCellMeasurementResultList ();
357
358 NS_LOG_LOGIC ("enb1MeasurementId = " << params.enb1MeasurementId);
359 NS_LOG_LOGIC ("enb2MeasurementId = " << params.enb2MeasurementId);
360 NS_LOG_LOGIC ("cellMeasurementResultList size = " << params.cellMeasurementResultList.size ());
361
363 }
364 }
365 else
366 {
367 NS_ASSERT_MSG (false, "ProcedureCode NOT SUPPORTED!!!");
368 }
369}
370
371
372void
374{
375 NS_LOG_FUNCTION (this << socket);
376
377 NS_LOG_LOGIC ("Recv UE DATA through X2-U interface from Socket");
378 Ptr<Packet> packet = socket->Recv ();
379 NS_LOG_LOGIC ("packetLen = " << packet->GetSize ());
380
382 "Missing infos of local and remote CellId");
383 Ptr<X2CellInfo> cellsInfo = m_x2InterfaceCellIds [socket];
384
385 GtpuHeader gtpu;
386 packet->RemoveHeader (gtpu);
387
388 NS_LOG_LOGIC ("GTP-U header: " << gtpu);
389
391 params.sourceCellId = cellsInfo->m_remoteCellIds.at (0);
392 params.targetCellId = cellsInfo->m_localCellIds.at (0);
393 params.gtpTeid = gtpu.GetTeid ();
394 params.ueData = packet;
395
396 m_x2SapUser->RecvUeData (params);
397}
398
399
400//
401// Implementation of the X2 SAP Provider
402//
403void
405{
406 NS_LOG_FUNCTION (this);
407
408 NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
409 NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
410 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
411 NS_LOG_LOGIC ("mmeUeS1apId = " << params.mmeUeS1apId);
412
414 "Missing infos for targetCellId = " << params.targetCellId);
416 Ptr<Socket> sourceSocket = socketInfo->m_localCtrlPlaneSocket;
417 Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
418
419 NS_LOG_LOGIC ("sourceSocket = " << sourceSocket);
420 NS_LOG_LOGIC ("targetIpAddr = " << targetIpAddr);
421
422 NS_LOG_INFO ("Send X2 message: HANDOVER REQUEST");
423
424 // Build the X2 message
425 EpcX2HandoverRequestHeader x2HoReqHeader;
426 x2HoReqHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
427 x2HoReqHeader.SetCause (params.cause);
428 x2HoReqHeader.SetTargetCellId (params.targetCellId);
429 x2HoReqHeader.SetMmeUeS1apId (params.mmeUeS1apId);
432 x2HoReqHeader.SetBearers (params.bearers);
433
434 EpcX2Header x2Header;
437 x2Header.SetLengthOfIes (x2HoReqHeader.GetLengthOfIes ());
438 x2Header.SetNumberOfIes (x2HoReqHeader.GetNumberOfIes ());
439
440 NS_LOG_INFO ("X2 header: " << x2Header);
441 NS_LOG_INFO ("X2 HandoverRequest header: " << x2HoReqHeader);
442
443 // Build the X2 packet
444 Ptr<Packet> packet = (params.rrcContext != 0) ? (params.rrcContext) : (Create <Packet> ());
445 packet->AddHeader (x2HoReqHeader);
446 packet->AddHeader (x2Header);
447 NS_LOG_INFO ("packetLen = " << packet->GetSize ());
448
449 // Send the X2 message through the socket
450 sourceSocket->SendTo (packet, 0, InetSocketAddress (targetIpAddr, m_x2cUdpPort));
451}
452
453
454void
456{
457 NS_LOG_FUNCTION (this);
458
459 NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
460 NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
461 NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
462 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
463
465 "Socket infos not defined for sourceCellId = " << params.sourceCellId);
466
467 Ptr<Socket> localSocket = m_x2InterfaceSockets [params.sourceCellId]->m_localCtrlPlaneSocket;
468 Ipv4Address remoteIpAddr = m_x2InterfaceSockets [params.sourceCellId]->m_remoteIpAddr;
469
470 NS_LOG_LOGIC ("localSocket = " << localSocket);
471 NS_LOG_LOGIC ("remoteIpAddr = " << remoteIpAddr);
472
473 NS_LOG_INFO ("Send X2 message: HANDOVER REQUEST ACK");
474
475 // Build the X2 message
476 EpcX2HandoverRequestAckHeader x2HoAckHeader;
477 x2HoAckHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
478 x2HoAckHeader.SetNewEnbUeX2apId (params.newEnbUeX2apId);
479 x2HoAckHeader.SetAdmittedBearers (params.admittedBearers);
480 x2HoAckHeader.SetNotAdmittedBearers (params.notAdmittedBearers);
481
482 EpcX2Header x2Header;
485 x2Header.SetLengthOfIes (x2HoAckHeader.GetLengthOfIes ());
486 x2Header.SetNumberOfIes (x2HoAckHeader.GetNumberOfIes ());
487
488 NS_LOG_INFO ("X2 header: " << x2Header);
489 NS_LOG_INFO ("X2 HandoverAck header: " << x2HoAckHeader);
490 NS_LOG_INFO ("RRC context: " << params.rrcContext);
491
492 // Build the X2 packet
493 Ptr<Packet> packet = (params.rrcContext != 0) ? (params.rrcContext) : (Create <Packet> ());
494 packet->AddHeader (x2HoAckHeader);
495 packet->AddHeader (x2Header);
496 NS_LOG_INFO ("packetLen = " << packet->GetSize ());
497
498 // Send the X2 message through the socket
499 localSocket->SendTo (packet, 0, InetSocketAddress (remoteIpAddr, m_x2cUdpPort));
500}
501
502
503void
505{
506 NS_LOG_FUNCTION (this);
507
508 NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
509 NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
510 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
511 NS_LOG_LOGIC ("cause = " << params.cause);
512 NS_LOG_LOGIC ("criticalityDiagnostics = " << params.criticalityDiagnostics);
513
515 "Socket infos not defined for sourceCellId = " << params.sourceCellId);
516
517 Ptr<Socket> localSocket = m_x2InterfaceSockets [params.sourceCellId]->m_localCtrlPlaneSocket;
518 Ipv4Address remoteIpAddr = m_x2InterfaceSockets [params.sourceCellId]->m_remoteIpAddr;
519
520 NS_LOG_LOGIC ("localSocket = " << localSocket);
521 NS_LOG_LOGIC ("remoteIpAddr = " << remoteIpAddr);
522
523 NS_LOG_INFO ("Send X2 message: HANDOVER PREPARATION FAILURE");
524
525 // Build the X2 message
526 EpcX2HandoverPreparationFailureHeader x2HoPrepFailHeader;
527 x2HoPrepFailHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
528 x2HoPrepFailHeader.SetCause (params.cause);
529 x2HoPrepFailHeader.SetCriticalityDiagnostics (params.criticalityDiagnostics);
530
531 EpcX2Header x2Header;
534 x2Header.SetLengthOfIes (x2HoPrepFailHeader.GetLengthOfIes ());
535 x2Header.SetNumberOfIes (x2HoPrepFailHeader.GetNumberOfIes ());
536
537 NS_LOG_INFO ("X2 header: " << x2Header);
538 NS_LOG_INFO ("X2 HandoverPrepFail header: " << x2HoPrepFailHeader);
539
540 // Build the X2 packet
541 Ptr<Packet> packet = Create <Packet> ();
542 packet->AddHeader (x2HoPrepFailHeader);
543 packet->AddHeader (x2Header);
544 NS_LOG_INFO ("packetLen = " << packet->GetSize ());
545
546 // Send the X2 message through the socket
547 localSocket->SendTo (packet, 0, InetSocketAddress (remoteIpAddr, m_x2cUdpPort));
548}
549
550
551void
553{
554 NS_LOG_FUNCTION (this);
555
556 NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
557 NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
558 NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
559 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
560 NS_LOG_LOGIC ("erabsList size = " << params.erabsSubjectToStatusTransferList.size ());
561
563 "Socket infos not defined for targetCellId = " << params.targetCellId);
564
565 Ptr<Socket> localSocket = m_x2InterfaceSockets [params.targetCellId]->m_localCtrlPlaneSocket;
566 Ipv4Address remoteIpAddr = m_x2InterfaceSockets [params.targetCellId]->m_remoteIpAddr;
567
568 NS_LOG_LOGIC ("localSocket = " << localSocket);
569 NS_LOG_LOGIC ("remoteIpAddr = " << remoteIpAddr);
570
571 NS_LOG_INFO ("Send X2 message: SN STATUS TRANSFER");
572
573 // Build the X2 message
574 EpcX2SnStatusTransferHeader x2SnStatusXferHeader;
575 x2SnStatusXferHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
576 x2SnStatusXferHeader.SetNewEnbUeX2apId (params.newEnbUeX2apId);
578
579 EpcX2Header x2Header;
582 x2Header.SetLengthOfIes (x2SnStatusXferHeader.GetLengthOfIes ());
583 x2Header.SetNumberOfIes (x2SnStatusXferHeader.GetNumberOfIes ());
584
585 NS_LOG_INFO ("X2 header: " << x2Header);
586 NS_LOG_INFO ("X2 SnStatusTransfer header: " << x2SnStatusXferHeader);
587
588 // Build the X2 packet
589 Ptr<Packet> packet = Create <Packet> ();
590 packet->AddHeader (x2SnStatusXferHeader);
591 packet->AddHeader (x2Header);
592 NS_LOG_INFO ("packetLen = " << packet->GetSize ());
593
594 // Send the X2 message through the socket
595 localSocket->SendTo (packet, 0, InetSocketAddress (remoteIpAddr, m_x2cUdpPort));
596}
597
598
599void
601{
602 NS_LOG_FUNCTION (this);
603
604 NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
605 NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
606 NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
607
609 "Socket infos not defined for sourceCellId = " << params.sourceCellId);
610
611 Ptr<Socket> localSocket = m_x2InterfaceSockets [params.sourceCellId]->m_localCtrlPlaneSocket;
612 Ipv4Address remoteIpAddr = m_x2InterfaceSockets [params.sourceCellId]->m_remoteIpAddr;
613
614 NS_LOG_LOGIC ("localSocket = " << localSocket);
615 NS_LOG_LOGIC ("remoteIpAddr = " << remoteIpAddr);
616
617 NS_LOG_INFO ("Send X2 message: UE CONTEXT RELEASE");
618
619 // Build the X2 message
620 EpcX2UeContextReleaseHeader x2UeCtxReleaseHeader;
621 x2UeCtxReleaseHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
622 x2UeCtxReleaseHeader.SetNewEnbUeX2apId (params.newEnbUeX2apId);
623
624 EpcX2Header x2Header;
627 x2Header.SetLengthOfIes (x2UeCtxReleaseHeader.GetLengthOfIes ());
628 x2Header.SetNumberOfIes (x2UeCtxReleaseHeader.GetNumberOfIes ());
629
630 NS_LOG_INFO ("X2 header: " << x2Header);
631 NS_LOG_INFO ("X2 UeContextRelease header: " << x2UeCtxReleaseHeader);
632
633 // Build the X2 packet
634 Ptr<Packet> packet = Create <Packet> ();
635 packet->AddHeader (x2UeCtxReleaseHeader);
636 packet->AddHeader (x2Header);
637 NS_LOG_INFO ("packetLen = " << packet->GetSize ());
638
639 // Send the X2 message through the socket
640 localSocket->SendTo (packet, 0, InetSocketAddress (remoteIpAddr, m_x2cUdpPort));
641}
642
643
644void
646{
647 NS_LOG_FUNCTION (this);
648
649 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
650 NS_LOG_LOGIC ("cellInformationList size = " << params.cellInformationList.size ());
651
653 "Missing infos for targetCellId = " << params.targetCellId);
655 Ptr<Socket> sourceSocket = socketInfo->m_localCtrlPlaneSocket;
656 Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
657
658 NS_LOG_LOGIC ("sourceSocket = " << sourceSocket);
659 NS_LOG_LOGIC ("targetIpAddr = " << targetIpAddr);
660
661 NS_LOG_INFO ("Send X2 message: LOAD INFORMATION");
662
663 // Build the X2 message
664 EpcX2LoadInformationHeader x2LoadInfoHeader;
665 x2LoadInfoHeader.SetCellInformationList (params.cellInformationList);
666
667 EpcX2Header x2Header;
670 x2Header.SetLengthOfIes (x2LoadInfoHeader.GetLengthOfIes ());
671 x2Header.SetNumberOfIes (x2LoadInfoHeader.GetNumberOfIes ());
672
673 NS_LOG_INFO ("X2 header: " << x2Header);
674 NS_LOG_INFO ("X2 LoadInformation header: " << x2LoadInfoHeader);
675
676 // Build the X2 packet
677 Ptr<Packet> packet = Create <Packet> ();
678 packet->AddHeader (x2LoadInfoHeader);
679 packet->AddHeader (x2Header);
680 NS_LOG_INFO ("packetLen = " << packet->GetSize ());
681
682 // Send the X2 message through the socket
683 sourceSocket->SendTo (packet, 0, InetSocketAddress (targetIpAddr, m_x2cUdpPort));
684
685}
686
687
688void
690{
691 NS_LOG_FUNCTION (this);
692
693 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
694 NS_LOG_LOGIC ("enb1MeasurementId = " << params.enb1MeasurementId);
695 NS_LOG_LOGIC ("enb2MeasurementId = " << params.enb2MeasurementId);
696 NS_LOG_LOGIC ("cellMeasurementResultList size = " << params.cellMeasurementResultList.size ());
697
699 "Missing infos for targetCellId = " << params.targetCellId);
701 Ptr<Socket> sourceSocket = socketInfo->m_localCtrlPlaneSocket;
702 Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
703
704 NS_LOG_LOGIC ("sourceSocket = " << sourceSocket);
705 NS_LOG_LOGIC ("targetIpAddr = " << targetIpAddr);
706
707 NS_LOG_INFO ("Send X2 message: RESOURCE STATUS UPDATE");
708
709 // Build the X2 message
710 EpcX2ResourceStatusUpdateHeader x2ResourceStatUpdHeader;
711 x2ResourceStatUpdHeader.SetEnb1MeasurementId (params.enb1MeasurementId);
712 x2ResourceStatUpdHeader.SetEnb2MeasurementId (params.enb2MeasurementId);
713 x2ResourceStatUpdHeader.SetCellMeasurementResultList (params.cellMeasurementResultList);
714
715 EpcX2Header x2Header;
718 x2Header.SetLengthOfIes (x2ResourceStatUpdHeader.GetLengthOfIes ());
719 x2Header.SetNumberOfIes (x2ResourceStatUpdHeader.GetNumberOfIes ());
720
721 NS_LOG_INFO ("X2 header: " << x2Header);
722 NS_LOG_INFO ("X2 ResourceStatusUpdate header: " << x2ResourceStatUpdHeader);
723
724 // Build the X2 packet
725 Ptr<Packet> packet = Create <Packet> ();
726 packet->AddHeader (x2ResourceStatUpdHeader);
727 packet->AddHeader (x2Header);
728 NS_LOG_INFO ("packetLen = " << packet->GetSize ());
729
730 // Send the X2 message through the socket
731 sourceSocket->SendTo (packet, 0, InetSocketAddress (targetIpAddr, m_x2cUdpPort));
732
733}
734
735
736void
738{
739 NS_LOG_FUNCTION (this);
740
741 NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
742 NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
743 NS_LOG_LOGIC ("gtpTeid = " << params.gtpTeid);
744
746 "Missing infos for targetCellId = " << params.targetCellId);
748 Ptr<Socket> sourceSocket = socketInfo->m_localUserPlaneSocket;
749 Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
750
751 NS_LOG_LOGIC ("sourceSocket = " << sourceSocket);
752 NS_LOG_LOGIC ("targetIpAddr = " << targetIpAddr);
753
754 GtpuHeader gtpu;
755 gtpu.SetTeid (params.gtpTeid);
756 gtpu.SetLength (params.ueData->GetSize () + gtpu.GetSerializedSize () - 8);
757 NS_LOG_INFO ("GTP-U header: " << gtpu);
758
759 Ptr<Packet> packet = params.ueData;
760 packet->AddHeader (gtpu);
761
762 NS_LOG_INFO ("Forward UE DATA through X2 interface");
763 sourceSocket->SendTo (packet, 0, InetSocketAddress (targetIpAddr, m_x2uUdpPort));
764}
765
766} // namespace ns3
EpcX2HandoverPreparationFailureHeader.
void SetCriticalityDiagnostics(uint16_t criticalityDiagnostics)
Set criticality diagnostics function.
void SetCause(uint16_t cause)
Set cause function.
uint16_t GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
uint16_t GetCause() const
Get cause function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
uint16_t GetCriticalityDiagnostics() const
Get criticality diagnostics function.
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
Get number of IEs function.
EpcX2HandoverRequestAckHeader.
uint16_t GetNewEnbUeX2apId() const
Get new ENB UE X2 AP ID function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
std::vector< EpcX2Sap::ErabNotAdmittedItem > GetNotAdmittedBearers() const
Get not admitted bearers function.
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.
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetAdmittedBearers(std::vector< EpcX2Sap::ErabAdmittedItem > bearers)
Set admitted bearers function.
EpcX2HandoverRequestHeader.
uint16_t GetCause() const
Get cause function.
void SetCause(uint16_t cause)
Set cause function.
void SetMmeUeS1apId(uint32_t mmeUeS1apId)
Set MME UE S1 AP ID function.
uint32_t GetMmeUeS1apId() const
Get MME UE S1 AP ID function.
void SetTargetCellId(uint16_t targetCellId)
Set target cell id function.
void SetUeAggregateMaxBitRateUplink(uint64_t bitRate)
Set UE Aggregrate Max Bit Rate Uplik function.
uint64_t GetUeAggregateMaxBitRateUplink() const
Get UE Aggregrate 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 Aggregrate Max Bit Rate Downlink function.
void SetOldEnbUeX2apId(uint16_t x2apId)
Set old ENB X2 AP ID function.
uint32_t GetNumberOfIes() const
Get number of IEs.
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.
Introspection did not find any typical Config paths.
Definition: epc-x2-header.h:34
void SetLengthOfIes(uint32_t lengthOfIes)
Set length of IEs function.
void SetProcedureCode(uint8_t procedureCode)
Set procedure code function.
uint8_t GetProcedureCode() const
Get procedure code function.
void SetNumberOfIes(uint32_t numberOfIes)
Set number of IEs function.
uint8_t GetMessageType() const
Get message type function.
void SetMessageType(uint8_t messageType)
Set message type function.
This entity is installed inside an eNB and provides the functionality for the X2 interface.
Definition: epc-x2.h:100
std::map< uint16_t, Ptr< X2IfaceInfo > > m_x2InterfaceSockets
Map the targetCellId to the corresponding (sourceSocket, remoteIpAddr) to be used to send the X2 mess...
Definition: epc-x2.h:216
EpcX2SapUser * m_x2SapUser
X2 SAP user.
Definition: epc-x2.h:206
virtual void DoSendHandoverRequestAck(EpcX2SapProvider::HandoverRequestAckParams params)
Send handover request ack function.
Definition: epc-x2.cc:455
EpcX2SapProvider * m_x2SapProvider
X2 SAP provider.
Definition: epc-x2.h:207
virtual void DoSendUeContextRelease(EpcX2SapProvider::UeContextReleaseParams params)
Send UE context release function.
Definition: epc-x2.cc:600
virtual ~EpcX2(void)
Destructor.
Definition: epc-x2.cc:91
void AddX2Interface(uint16_t enb1CellId, Ipv4Address enb1X2Address, std::vector< uint16_t > enb2CellIds, Ipv4Address enb2X2Address)
Add an X2 interface to this EPC X2 entity.
Definition: epc-x2.cc:131
static TypeId GetTypeId(void)
Get the type ID.
Definition: epc-x2.cc:107
virtual void DoSendResourceStatusUpdate(EpcX2SapProvider::ResourceStatusUpdateParams params)
Send resource status update function.
Definition: epc-x2.cc:689
friend class EpcX2SpecificEpcX2SapProvider< EpcX2 >
allow EpcX2SpecificEpcX2SapProvider<EpcX2> class friend access
Definition: epc-x2.h:102
virtual void DoSendHandoverPreparationFailure(EpcX2SapProvider::HandoverPreparationFailureParams params)
Send handover preparation failure function.
Definition: epc-x2.cc:504
void RecvFromX2cSocket(Ptr< Socket > socket)
Method to be assigned to the recv callback of the X2-C (X2 Control Plane) socket.
Definition: epc-x2.cc:174
virtual void DoSendHandoverRequest(EpcX2SapProvider::HandoverRequestParams params)
Send handover request function.
Definition: epc-x2.cc:404
virtual void DoSendUeData(EpcX2SapProvider::UeDataParams params)
Send UE data function.
Definition: epc-x2.cc:737
EpcX2SapProvider * GetEpcX2SapProvider()
Definition: epc-x2.cc:123
uint16_t m_x2uUdpPort
UDP ports to be used for the X2-U interface.
Definition: epc-x2.h:231
uint16_t m_x2cUdpPort
UDP ports to be used for the X2-C interface.
Definition: epc-x2.h:227
virtual void DoSendLoadInformation(EpcX2SapProvider::LoadInformationParams params)
Send load information function.
Definition: epc-x2.cc:645
EpcX2()
Constructor.
Definition: epc-x2.cc:82
std::map< Ptr< Socket >, Ptr< X2CellInfo > > m_x2InterfaceCellIds
Map the localSocket (the one receiving the X2 message) to the corresponding (sourceCellId,...
Definition: epc-x2.h:222
virtual void DoDispose(void)
Destructor implementation.
Definition: epc-x2.cc:97
virtual void DoSendSnStatusTransfer(EpcX2SapProvider::SnStatusTransferParams params)
Send SN status transfer function.
Definition: epc-x2.cc:552
void SetEpcX2SapUser(EpcX2SapUser *s)
Definition: epc-x2.cc:116
void RecvFromX2uSocket(Ptr< Socket > socket)
Method to be assigned to the recv callback of the X2-U (X2 User Plane) socket.
Definition: epc-x2.cc:373
EpcX2LoadInformationHeader.
std::vector< EpcX2Sap::CellInformationItem > GetCellInformationList() const
Get cell information list function.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetCellInformationList(std::vector< EpcX2Sap::CellInformationItem > cellInformationList)
Set cell information list function.
uint32_t GetLengthOfIes() const
Get length of IEs function.
EpcX2ResourceStatusUpdateHeader.
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.
uint32_t GetNumberOfIes() const
Get number of IEs function.
uint16_t GetEnb2MeasurementId() const
Get ENB2 measurement ID function.
std::vector< EpcX2Sap::CellMeasurementResultItem > GetCellMeasurementResultList() const
Get cell measurement results list function.
void SetCellMeasurementResultList(std::vector< EpcX2Sap::CellMeasurementResultItem > cellMeasurementResultList)
Set cell measurement results list function.
uint16_t GetEnb1MeasurementId() const
Get ENB1 measurement ID function.
These service primitives of this part of the X2 SAP are provided by the X2 entity and issued by RRC e...
Definition: epc-x2-sap.h:344
These service primitives of this part of the X2 SAP are provided by the RRC entity and issued by the ...
Definition: epc-x2-sap.h:407
virtual void RecvUeData(UeDataParams params)=0
Receive UE data function.
virtual void RecvUeContextRelease(UeContextReleaseParams params)=0
Receive UE context release function.
virtual void RecvSnStatusTransfer(SnStatusTransferParams params)=0
Receive SN status transfer function.
virtual void RecvLoadInformation(LoadInformationParams params)=0
Receive load information function.
virtual void RecvHandoverRequestAck(HandoverRequestAckParams params)=0
Receive handover request ack function.
virtual void RecvResourceStatusUpdate(ResourceStatusUpdateParams params)=0
Receive resource status update function.
virtual void RecvHandoverPreparationFailure(HandoverPreparationFailureParams params)=0
Receive handover preparation failure function.
virtual void RecvHandoverRequest(HandoverRequestParams params)=0
Receive handover request function.
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.
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 SetNewEnbUeX2apId(uint16_t x2apId)
Set 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.
EpcX2UeContextReleaseHeader.
void SetNewEnbUeX2apId(uint16_t x2apId)
Set new ENB UE X2 AP ID function.
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 GetOldEnbUeX2apId() const
Get old ENB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
Set length of IEs function.
Implementation of the GPRS Tunnelling Protocol header according to GTPv1-U Release 10 as per 3Gpp TS ...
void SetTeid(uint32_t teid)
Set TEID function.
virtual uint32_t GetSerializedSize(void) const
uint32_t GetTeid() const
Get a tunnel endpoint identificator (TEID)
void SetLength(uint16_t length)
Set the length in octets of the payload.
an Inet address class
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
A base class which provides memory management and object aggregation.
Definition: object.h:88
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Definition: packet.cc:280
void AddHeader(const Header &header)
Add header to this packet.
Definition: packet.cc:256
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
Definition: packet.h:856
void SetRecvCallback(Callback< void, Ptr< Socket > > receivedData)
Notify application when new data is available to be read.
Definition: socket.cc:128
static Ptr< Socket > CreateSocket(Ptr< Node > node, TypeId tid)
This method wraps the creation of sockets that is performed on a given node by a SocketFactory specif...
Definition: socket.cc:71
virtual Ptr< Packet > Recv(uint32_t maxSize, uint32_t flags)=0
Read data from the socket.
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket.
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)=0
Send data to a specified peer.
a unique identifier for an interface.
Definition: type-id.h:59
static TypeId LookupByName(std::string name)
Get a TypeId by name.
Definition: type-id.cc:829
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:922
X2CellInfo.
Definition: epc-x2.h:70
virtual ~X2CellInfo(void)
Definition: epc-x2.cc:65
X2CellInfo & operator=(const X2CellInfo &value)
Assignment operator.
Definition: epc-x2.cc:70
std::vector< uint16_t > m_remoteCellIds
remote cell IDs
Definition: epc-x2.h:90
X2CellInfo(std::vector< uint16_t > localCellIds, std::vector< uint16_t > remoteCellIds)
Constructor.
Definition: epc-x2.cc:59
std::vector< uint16_t > m_localCellIds
local cell IDs
Definition: epc-x2.h:89
X2IfaceInfo.
Definition: epc-x2.h:40
Ptr< Socket > m_localCtrlPlaneSocket
local control plane socket
Definition: epc-x2.h:61
Ipv4Address m_remoteIpAddr
remote IP address
Definition: epc-x2.h:60
X2IfaceInfo & operator=(const X2IfaceInfo &value)
Assignment operator.
Definition: epc-x2.cc:48
virtual ~X2IfaceInfo(void)
Definition: epc-x2.cc:41
X2IfaceInfo(Ipv4Address remoteIpAddr, Ptr< Socket > localCtrlPlaneSocket, Ptr< Socket > localUserPlaneSocket)
Constructor.
Definition: epc-x2.cc:34
Ptr< Socket > m_localUserPlaneSocket
local user plane socket
Definition: epc-x2.h:62
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition: assert.h:67
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition: assert.h:88
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:289
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:281
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Definition: callback.h:1648
Parameters of the HANDOVER PREPARATION FAILURE message.
Definition: epc-x2-sap.h:263
uint16_t criticalityDiagnostics
criticality diagnostics
Definition: epc-x2-sap.h:268
uint16_t oldEnbUeX2apId
old ENB UE X2 AP ID
Definition: epc-x2-sap.h:264
Parameters of the HANDOVER REQUEST ACKNOWLEDGE message.
Definition: epc-x2-sap.h:247
std::vector< ErabNotAdmittedItem > notAdmittedBearers
not admitted bearers
Definition: epc-x2-sap.h:253
std::vector< ErabAdmittedItem > admittedBearers
admitted bearers
Definition: epc-x2-sap.h:252
uint16_t sourceCellId
source cell ID
Definition: epc-x2-sap.h:250
uint16_t newEnbUeX2apId
new ENB UE X2 AP ID
Definition: epc-x2-sap.h:249
uint16_t targetCellId
target cell ID
Definition: epc-x2-sap.h:251
uint16_t oldEnbUeX2apId
old ENB UE X2 AP ID
Definition: epc-x2-sap.h:248
Ptr< Packet > rrcContext
RRC context.
Definition: epc-x2-sap.h:254
Parameters of the HANDOVER REQUEST message.
Definition: epc-x2-sap.h:229
uint16_t oldEnbUeX2apId
old ENB UE X2 AP ID
Definition: epc-x2-sap.h:230
uint64_t ueAggregateMaxBitRateDownlink
UE aggregrate max bit rate downlink.
Definition: epc-x2-sap.h:235
uint16_t sourceCellId
source cell ID
Definition: epc-x2-sap.h:232
uint64_t ueAggregateMaxBitRateUplink
UE aggregrate max bit rate uplink.
Definition: epc-x2-sap.h:236
uint16_t targetCellId
target cell ID
Definition: epc-x2-sap.h:233
Ptr< Packet > rrcContext
RRC context.
Definition: epc-x2-sap.h:238
uint32_t mmeUeS1apId
MME UE S1 AP ID.
Definition: epc-x2-sap.h:234
std::vector< ErabToBeSetupItem > bearers
bearers
Definition: epc-x2-sap.h:237
Parameters of the LOAD INFORMATION message.
Definition: epc-x2-sap.h:304
std::vector< CellInformationItem > cellInformationList
cell information list
Definition: epc-x2-sap.h:306
uint16_t targetCellId
target cell ID
Definition: epc-x2-sap.h:305
Parameters of the RESOURCE STATUS UPDATE message.
Definition: epc-x2-sap.h:315
uint16_t enb2MeasurementId
ENB2 measurement ID.
Definition: epc-x2-sap.h:318
uint16_t enb1MeasurementId
ENB1 measurement ID.
Definition: epc-x2-sap.h:317
std::vector< CellMeasurementResultItem > cellMeasurementResultList
cell measurement result list
Definition: epc-x2-sap.h:319
Parameters of the SN STATUS TRANSFER message.
Definition: epc-x2-sap.h:277
uint16_t newEnbUeX2apId
new ENB UE X2 AP ID
Definition: epc-x2-sap.h:279
std::vector< ErabsSubjectToStatusTransferItem > erabsSubjectToStatusTransferList
ERABs subject to status transfer list.
Definition: epc-x2-sap.h:282
uint16_t oldEnbUeX2apId
old ENB UE X2 AP ID
Definition: epc-x2-sap.h:278
uint16_t targetCellId
target cell ID
Definition: epc-x2-sap.h:281
uint16_t sourceCellId
source cell ID
Definition: epc-x2-sap.h:280
Parameters of the UE CONTEXT RELEASE message.
Definition: epc-x2-sap.h:291
uint16_t newEnbUeX2apId
new ENB UE X2 AP ID
Definition: epc-x2-sap.h:293
uint16_t oldEnbUeX2apId
old ENB UE X2 AP ID
Definition: epc-x2-sap.h:292
uint16_t sourceCellId
source cell ID
Definition: epc-x2-sap.h:294
Parameters of the UE DATA primitive.
Definition: epc-x2-sap.h:329
Ptr< Packet > ueData
UE data.
Definition: epc-x2-sap.h:333
uint16_t sourceCellId
source cell ID
Definition: epc-x2-sap.h:330
uint32_t gtpTeid
GTP TEID.
Definition: epc-x2-sap.h:332
uint16_t targetCellId
target cell ID
Definition: epc-x2-sap.h:331