src/lte/model/epc-x2.cc
author Manuel Requena <manuel.requena@cttc.es>
Fri, 14 Dec 2012 16:25:38 +0100
changeset 9553 ec2c02fa48f5
parent 9477 59d34a52beb4
child 9556 29b3091d8fb8
permissions -rw-r--r--
Add X2-U interface
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     2
/*
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     3
 * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     4
 *
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     8
 *
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    12
 * GNU General Public License for more details.
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    13
 *
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    17
 *
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    18
 * Author: Manuel Requena <manuel.requena@cttc.es>
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    19
 */
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    20
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    21
#include "ns3/log.h"
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    22
#include "ns3/inet-socket-address.h"
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    23
#include "ns3/packet.h"
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    24
#include "ns3/node.h"
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
    25
#include "ns3/epc-gtpu-header.h"
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    26
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    27
#include "ns3/epc-x2-header.h"
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    28
#include "ns3/epc-x2.h"
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    29
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    30
NS_LOG_COMPONENT_DEFINE ("EpcX2");
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    31
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    32
namespace ns3 {
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    33
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    34
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
    35
X2IfaceInfo::X2IfaceInfo (Ipv4Address remoteIpAddr, Ptr<Socket> localCtrlPlaneSocket, Ptr<Socket> localUserPlaneSocket)
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    36
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    37
  m_remoteIpAddr = remoteIpAddr;
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
    38
  m_localCtrlPlaneSocket = localCtrlPlaneSocket;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
    39
  m_localUserPlaneSocket = localUserPlaneSocket;
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    40
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    41
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    42
X2IfaceInfo::~X2IfaceInfo (void)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    43
{
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
    44
  m_localCtrlPlaneSocket = 0;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
    45
  m_localUserPlaneSocket = 0;
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    46
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    47
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    48
X2IfaceInfo& 
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    49
X2IfaceInfo::operator= (const X2IfaceInfo& value)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    50
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    51
  NS_LOG_FUNCTION (this);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    52
  m_remoteIpAddr = value.m_remoteIpAddr;
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
    53
  m_localCtrlPlaneSocket = value.m_localCtrlPlaneSocket;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
    54
  m_localUserPlaneSocket = value.m_localUserPlaneSocket;
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    55
  return *this;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    56
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    57
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    58
///////////////////////////////////////////
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    59
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    60
X2CellInfo::X2CellInfo (uint16_t localCellId, uint16_t remoteCellId)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    61
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    62
  m_localCellId = localCellId;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    63
  m_remoteCellId = remoteCellId;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    64
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    65
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    66
X2CellInfo::~X2CellInfo (void)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    67
{
9433
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
    68
  m_localCellId = 0;
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
    69
  m_remoteCellId = 0;
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    70
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    71
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    72
X2CellInfo& 
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    73
X2CellInfo::operator= (const X2CellInfo& value)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    74
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    75
  NS_LOG_FUNCTION (this);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    76
  m_localCellId = value.m_localCellId;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    77
  m_remoteCellId = value.m_remoteCellId;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    78
  return *this;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    79
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    80
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    81
///////////////////////////////////////////
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    82
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    83
NS_OBJECT_ENSURE_REGISTERED (EpcX2);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    84
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    85
EpcX2::EpcX2 ()
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
    86
  : m_x2cUdpPort (4444),
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
    87
    m_x2uUdpPort (2152)
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    88
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    89
  NS_LOG_FUNCTION (this);
9433
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
    90
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    91
  m_x2SapProvider = new EpcX2SpecificEpcX2SapProvider<EpcX2> (this);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    92
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    93
9433
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
    94
EpcX2::~EpcX2 ()
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
    95
{
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
    96
  NS_LOG_FUNCTION (this);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
    97
}
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
    98
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
    99
void
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   100
EpcX2::DoDispose (void)
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   101
{
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   102
  NS_LOG_FUNCTION (this);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   103
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   104
  m_x2InterfaceSockets.clear ();
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   105
  m_x2InterfaceCellIds.clear ();
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   106
  delete m_x2SapProvider;
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   107
}
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   108
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   109
TypeId
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   110
EpcX2::GetTypeId (void)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   111
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   112
  static TypeId tid = TypeId ("ns3::EpcX2")
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   113
    .SetParent<Object> ();
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   114
  return tid;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   115
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   116
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   117
void
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   118
EpcX2::SetEpcX2SapUser (EpcX2SapUser * s)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   119
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   120
  NS_LOG_FUNCTION (this << s);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   121
  m_x2SapUser = s;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   122
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   123
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   124
EpcX2SapProvider*
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   125
EpcX2::GetEpcX2SapProvider ()
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   126
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   127
  NS_LOG_FUNCTION (this);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   128
  return m_x2SapProvider;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   129
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   130
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   131
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   132
void
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   133
EpcX2::AddX2Interface (uint16_t localCellId, Ipv4Address localX2Address, uint16_t remoteCellId, Ipv4Address remoteX2Address)
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   134
{
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   135
  NS_LOG_FUNCTION (this << localCellId << localX2Address << remoteCellId << remoteX2Address);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   136
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   137
  int retval;
9416
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   138
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   139
  // Get local eNB where this X2 entity belongs to
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   140
  Ptr<Node> localEnb = GetObject<Node> ();
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   141
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   142
  // Create X2-C socket for the local eNB
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   143
  Ptr<Socket> localX2cSocket = Socket::CreateSocket (localEnb, TypeId::LookupByName ("ns3::UdpSocketFactory"));
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   144
  retval = localX2cSocket->Bind (InetSocketAddress (localX2Address, m_x2cUdpPort));
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   145
  NS_ASSERT (retval == 0);
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   146
  localX2cSocket->SetRecvCallback (MakeCallback (&EpcX2::RecvFromX2cSocket, this));
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   147
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   148
  // Create X2-U socket for the local eNB
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   149
  Ptr<Socket> localX2uSocket = Socket::CreateSocket (localEnb, TypeId::LookupByName ("ns3::UdpSocketFactory"));
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   150
  retval = localX2uSocket->Bind (InetSocketAddress (localX2Address, m_x2uUdpPort));
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   151
  NS_ASSERT (retval == 0);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   152
  localX2uSocket->SetRecvCallback (MakeCallback (&EpcX2::RecvFromX2uSocket, this));
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   153
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   154
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   155
  NS_ASSERT_MSG (m_x2InterfaceSockets.find (remoteCellId) == m_x2InterfaceSockets.end (),
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   156
                 "Mapping for remoteCellId = " << remoteCellId << " is already known");
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   157
  m_x2InterfaceSockets [remoteCellId] = Create<X2IfaceInfo> (remoteX2Address, localX2cSocket, localX2uSocket);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   158
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   159
  NS_ASSERT_MSG (m_x2InterfaceCellIds.find (localX2cSocket) == m_x2InterfaceCellIds.end (),
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   160
                 "Mapping for control plane localSocket = " << localX2cSocket << " is already known");
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   161
  m_x2InterfaceCellIds [localX2cSocket] = Create<X2CellInfo> (localCellId, remoteCellId);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   162
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   163
  NS_ASSERT_MSG (m_x2InterfaceCellIds.find (localX2uSocket) == m_x2InterfaceCellIds.end (),
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   164
                 "Mapping for data plane localSocket = " << localX2uSocket << " is already known");
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   165
  m_x2InterfaceCellIds [localX2uSocket] = Create<X2CellInfo> (localCellId, remoteCellId);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   166
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   167
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   168
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   169
void 
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   170
EpcX2::RecvFromX2cSocket (Ptr<Socket> socket)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   171
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   172
  NS_LOG_FUNCTION (this << socket);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   173
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   174
  NS_LOG_LOGIC ("Recv X2 message: from Socket");
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   175
  Ptr<Packet> packet = socket->Recv ();
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   176
  NS_LOG_LOGIC ("packetLen = " << packet->GetSize ());
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   177
9477
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   178
  NS_ASSERT_MSG (m_x2InterfaceCellIds.find (socket) != m_x2InterfaceCellIds.end (),
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   179
                 "Missing infos of local and remote CellId");
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   180
  Ptr<X2CellInfo> cellsInfo = m_x2InterfaceCellIds [socket];
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   181
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   182
  EpcX2Header x2Header;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   183
  packet->RemoveHeader (x2Header);
9412
da31245666bb Simplify handover management for multiple eNBs (i.e. different cellIds)
Manuel Requena <manuel.requena@cttc.es>
parents: 9410
diff changeset
   184
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   185
  NS_LOG_LOGIC ("X2 header: " << x2Header);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   186
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   187
  uint8_t messageType = x2Header.GetMessageType ();
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   188
  uint8_t procedureCode = x2Header.GetProcedureCode ();
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   189
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   190
  if (procedureCode == EpcX2Header::HandoverPreparation)
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   191
    {
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   192
      if (messageType == EpcX2Header::InitiatingMessage)
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   193
        {
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   194
          NS_LOG_LOGIC ("Recv X2 message: HANDOVER REQUEST");
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   195
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   196
          EpcX2HandoverRequestHeader x2HoReqHeader;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   197
          packet->RemoveHeader (x2HoReqHeader);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   198
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   199
          NS_LOG_INFO ("X2 HandoverRequest header: " << x2HoReqHeader);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   200
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   201
          EpcX2SapUser::HandoverRequestParams params;
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   202
          params.oldEnbUeX2apId = x2HoReqHeader.GetOldEnbUeX2apId ();
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   203
          params.cause          = x2HoReqHeader.GetCause ();
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   204
          params.sourceCellId   = cellsInfo->m_remoteCellId;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   205
          params.targetCellId   = x2HoReqHeader.GetTargetCellId ();
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   206
          params.ueAggregateMaxBitRateDownlink = x2HoReqHeader.GetUeAggregateMaxBitRateDownlink ();
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   207
          params.ueAggregateMaxBitRateUplink   = x2HoReqHeader.GetUeAggregateMaxBitRateUplink ();
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   208
          params.bearers        = x2HoReqHeader.GetBearers ();
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   209
          params.rrcContext     = packet;
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   210
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   211
          NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
9404
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   212
          NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   213
          NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   214
          NS_LOG_LOGIC ("cellsInfo->m_localCellId = " << cellsInfo->m_localCellId);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   215
          NS_ASSERT_MSG (params.targetCellId == cellsInfo->m_localCellId,
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   216
                         "TargetCellId mismatches with localCellId");
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   217
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   218
          m_x2SapUser->RecvHandoverRequest (params);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   219
        }
9454
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   220
      else if (messageType == EpcX2Header::SuccessfulOutcome)
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   221
        {
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   222
          NS_LOG_LOGIC ("Recv X2 message: HANDOVER REQUEST ACK");
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   223
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   224
          EpcX2HandoverRequestAckHeader x2HoReqAckHeader;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   225
          packet->RemoveHeader (x2HoReqAckHeader);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   226
9477
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   227
          NS_LOG_INFO ("X2 HandoverRequestAck header: " << x2HoReqAckHeader);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   228
9345
8290ae6cab62 add/remove UEs and bearers upon handover
Nicola Baldo <nicola@baldo.biz>
parents: 9330
diff changeset
   229
          EpcX2SapUser::HandoverRequestAckParams params;          
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   230
          params.oldEnbUeX2apId = x2HoReqAckHeader.GetOldEnbUeX2apId ();
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   231
          params.newEnbUeX2apId = x2HoReqAckHeader.GetNewEnbUeX2apId ();
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   232
          params.sourceCellId   = cellsInfo->m_localCellId;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   233
          params.targetCellId   = cellsInfo->m_remoteCellId;
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   234
          params.admittedBearers = x2HoReqAckHeader.GetAdmittedBearers ();
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   235
          params.notAdmittedBearers = x2HoReqAckHeader.GetNotAdmittedBearers ();
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   236
          params.rrcContext     = packet;
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   237
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   238
          NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   239
          NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   240
          NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   241
          NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   242
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   243
          m_x2SapUser->RecvHandoverRequestAck (params);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   244
        }
9454
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   245
      else // messageType == EpcX2Header::UnsuccessfulOutcome
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   246
        {
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   247
          NS_LOG_LOGIC ("Recv X2 message: HANDOVER PREPARATION FAILURE");
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   248
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   249
          EpcX2HandoverPreparationFailureHeader x2HoPrepFailHeader;
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   250
          packet->RemoveHeader (x2HoPrepFailHeader);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   251
9477
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   252
          NS_LOG_INFO ("X2 HandoverPreparationFailure header: " << x2HoPrepFailHeader);
9454
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   253
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   254
          EpcX2SapUser::HandoverPreparationFailureParams params;          
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   255
          params.oldEnbUeX2apId = x2HoPrepFailHeader.GetOldEnbUeX2apId ();
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   256
          params.sourceCellId   = cellsInfo->m_localCellId;
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   257
          params.targetCellId   = cellsInfo->m_remoteCellId;
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   258
          params.cause          = x2HoPrepFailHeader.GetCause ();
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   259
          params.criticalityDiagnostics = x2HoPrepFailHeader.GetCriticalityDiagnostics ();
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   260
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   261
          NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   262
          NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   263
          NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   264
          NS_LOG_LOGIC ("cause = " << params.cause);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   265
          NS_LOG_LOGIC ("criticalityDiagnostics = " << params.criticalityDiagnostics);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   266
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   267
          m_x2SapUser->RecvHandoverPreparationFailure (params);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   268
        }
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   269
    }
9433
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   270
  else if (procedureCode == EpcX2Header::LoadIndication)
9416
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   271
    {
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   272
      if (messageType == EpcX2Header::InitiatingMessage)
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   273
        {
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   274
          NS_LOG_LOGIC ("Recv X2 message: LOAD INFORMATION");
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   275
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   276
          EpcX2LoadInformationHeader x2LoadInfoHeader;
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   277
          packet->RemoveHeader (x2LoadInfoHeader);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   278
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   279
          NS_LOG_INFO ("X2 LoadInformation header: " << x2LoadInfoHeader);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   280
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   281
          EpcX2SapUser::LoadInformationParams params;
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   282
          params.cellInformationList = x2LoadInfoHeader.GetCellInformationList ();
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   283
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   284
          NS_LOG_LOGIC ("cellInformationList size = " << params.cellInformationList.size ());
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   285
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   286
          m_x2SapUser->RecvLoadInformation (params);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   287
        }
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   288
    }
9477
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   289
  else if (procedureCode == EpcX2Header::SnStatusTransfer)
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   290
    {
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   291
      if (messageType == EpcX2Header::InitiatingMessage)
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   292
        {
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   293
          NS_LOG_LOGIC ("Recv X2 message: SN STATUS TRANSFER");
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   294
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   295
            EpcX2SnStatusTransferHeader x2SnStatusXferHeader;
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   296
            packet->RemoveHeader (x2SnStatusXferHeader);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   297
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   298
            NS_LOG_INFO ("X2 SnStatusTransfer header: " << x2SnStatusXferHeader);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   299
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   300
            EpcX2SapUser::SnStatusTransferParams params;
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   301
            params.oldEnbUeX2apId = x2SnStatusXferHeader.GetOldEnbUeX2apId ();
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   302
            params.newEnbUeX2apId = x2SnStatusXferHeader.GetNewEnbUeX2apId ();
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   303
            params.sourceCellId   = cellsInfo->m_remoteCellId;
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   304
            params.targetCellId   = cellsInfo->m_localCellId;
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   305
            params.erabsSubjectToStatusTransferList = x2SnStatusXferHeader.GetErabsSubjectToStatusTransferList ();
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   306
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   307
            NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   308
            NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   309
            NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   310
            NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   311
            NS_LOG_LOGIC ("erabsList size = " << params.erabsSubjectToStatusTransferList.size ());
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   312
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   313
            m_x2SapUser->RecvSnStatusTransfer (params);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   314
        }
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   315
    }
9416
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   316
  else if (procedureCode == EpcX2Header::UeContextRelease)
9404
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   317
    {
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   318
      if (messageType == EpcX2Header::InitiatingMessage)
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   319
        {
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   320
          NS_LOG_LOGIC ("Recv X2 message: UE CONTEXT RELEASE");
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   321
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   322
          EpcX2UeContextReleaseHeader x2UeCtxReleaseHeader;
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   323
          packet->RemoveHeader (x2UeCtxReleaseHeader);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   324
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   325
          NS_LOG_INFO ("X2 UeContextRelease header: " << x2UeCtxReleaseHeader);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   326
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   327
          EpcX2SapUser::UeContextReleaseParams params;
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   328
          params.oldEnbUeX2apId = x2UeCtxReleaseHeader.GetOldEnbUeX2apId ();
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   329
          params.newEnbUeX2apId = x2UeCtxReleaseHeader.GetNewEnbUeX2apId ();
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   330
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   331
          NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   332
          NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   333
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   334
          m_x2SapUser->RecvUeContextRelease (params);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   335
        }
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   336
    }
9433
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   337
  else if (procedureCode == EpcX2Header::ResourceStatusReporting)
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   338
    {
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   339
      if (messageType == EpcX2Header::InitiatingMessage)
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   340
        {
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   341
          NS_LOG_LOGIC ("Recv X2 message: RESOURCE STATUS UPDATE");
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   342
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   343
          EpcX2ResourceStatusUpdateHeader x2ResStatUpdHeader;
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   344
          packet->RemoveHeader (x2ResStatUpdHeader);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   345
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   346
          NS_LOG_INFO ("X2 ResourceStatusUpdate header: " << x2ResStatUpdHeader);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   347
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   348
          EpcX2SapUser::ResourceStatusUpdateParams params;
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   349
          params.enb1MeasurementId = x2ResStatUpdHeader.GetEnb1MeasurementId ();
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   350
          params.enb2MeasurementId = x2ResStatUpdHeader.GetEnb2MeasurementId ();
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   351
          params.cellMeasurementResultList = x2ResStatUpdHeader.GetCellMeasurementResultList ();
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   352
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   353
          NS_LOG_LOGIC ("enb1MeasurementId = " << params.enb1MeasurementId);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   354
          NS_LOG_LOGIC ("enb2MeasurementId = " << params.enb2MeasurementId);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   355
          NS_LOG_LOGIC ("cellMeasurementResultList size = " << params.cellMeasurementResultList.size ());
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   356
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   357
          m_x2SapUser->RecvResourceStatusUpdate (params);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   358
        }
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   359
    }
9416
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   360
  else
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   361
    {
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   362
      NS_ASSERT_MSG (false, "ProcedureCode NOT SUPPORTED!!!");
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   363
    }
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   364
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   365
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   366
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   367
void 
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   368
EpcX2::RecvFromX2uSocket (Ptr<Socket> socket)
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   369
{
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   370
  NS_LOG_FUNCTION (this << socket);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   371
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   372
  NS_LOG_LOGIC ("Recv UE DATA through X2-U interface from Socket");
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   373
  Ptr<Packet> packet = socket->Recv ();
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   374
  NS_LOG_LOGIC ("packetLen = " << packet->GetSize ());
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   375
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   376
  NS_ASSERT_MSG (m_x2InterfaceCellIds.find (socket) != m_x2InterfaceCellIds.end (),
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   377
                 "Missing infos of local and remote CellId");
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   378
  Ptr<X2CellInfo> cellsInfo = m_x2InterfaceCellIds [socket];
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   379
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   380
  GtpuHeader gtpu;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   381
  packet->RemoveHeader (gtpu);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   382
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   383
  NS_LOG_LOGIC ("GTP-U header: " << gtpu);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   384
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   385
  EpcX2SapUser::UeDataParams params;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   386
  params.sourceCellId = cellsInfo->m_remoteCellId;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   387
  params.targetCellId = cellsInfo->m_localCellId;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   388
  params.gtpTeid = gtpu.GetTeid ();
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   389
  params.ueData = packet;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   390
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   391
  m_x2SapUser->RecvUeData (params);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   392
}
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   393
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   394
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   395
//
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   396
// Implementation of the X2 SAP Provider
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   397
//
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   398
void
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   399
EpcX2::DoSendHandoverRequest (EpcX2SapProvider::HandoverRequestParams params)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   400
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   401
  NS_LOG_FUNCTION (this);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   402
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   403
  NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   404
  NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   405
  NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   406
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   407
  NS_ASSERT_MSG (m_x2InterfaceSockets.find (params.targetCellId) != m_x2InterfaceSockets.end (),
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   408
                 "Missing infos for targetCellId = " << params.targetCellId);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   409
  Ptr<X2IfaceInfo> socketInfo = m_x2InterfaceSockets [params.targetCellId];
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   410
  Ptr<Socket> sourceSocket = socketInfo->m_localCtrlPlaneSocket;
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   411
  Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   412
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   413
  NS_LOG_LOGIC ("sourceSocket = " << sourceSocket);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   414
  NS_LOG_LOGIC ("targetIpAddr = " << targetIpAddr);
9404
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   415
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   416
  NS_LOG_INFO ("Send X2 message: HANDOVER REQUEST");
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   417
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   418
  // Build the X2 message
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   419
  EpcX2HandoverRequestHeader x2HoReqHeader;
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   420
  x2HoReqHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   421
  x2HoReqHeader.SetCause (params.cause);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   422
  x2HoReqHeader.SetTargetCellId (params.targetCellId);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   423
  x2HoReqHeader.SetUeAggregateMaxBitRateDownlink (params.ueAggregateMaxBitRateDownlink);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   424
  x2HoReqHeader.SetUeAggregateMaxBitRateUplink (params.ueAggregateMaxBitRateUplink);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   425
  x2HoReqHeader.SetBearers (params.bearers);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   426
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   427
  EpcX2Header x2Header;
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   428
  x2Header.SetMessageType (EpcX2Header::InitiatingMessage);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   429
  x2Header.SetProcedureCode (EpcX2Header::HandoverPreparation);
9397
08dde5bce775 Add some IEs to the X2 message headers
Manuel Requena <manuel.requena@cttc.es>
parents: 9395
diff changeset
   430
  x2Header.SetLengthOfIes (x2HoReqHeader.GetLengthOfIes ());
08dde5bce775 Add some IEs to the X2 message headers
Manuel Requena <manuel.requena@cttc.es>
parents: 9395
diff changeset
   431
  x2Header.SetNumberOfIes (x2HoReqHeader.GetNumberOfIes ());
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   432
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   433
  NS_LOG_INFO ("X2 header: " << x2Header);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   434
  NS_LOG_INFO ("X2 HandoverRequest header: " << x2HoReqHeader);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   435
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   436
  // Build the X2 packet
9416
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   437
  Ptr<Packet> packet = (params.rrcContext != 0) ? (params.rrcContext) : (Create <Packet> ());
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   438
  packet->AddHeader (x2HoReqHeader);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   439
  packet->AddHeader (x2Header);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   440
  NS_LOG_INFO ("packetLen = " << packet->GetSize ());
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   441
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   442
  // Send the X2 message through the socket
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   443
  sourceSocket->SendTo (packet, 0, InetSocketAddress (targetIpAddr, m_x2cUdpPort));
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   444
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   445
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   446
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   447
void
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   448
EpcX2::DoSendHandoverRequestAck (EpcX2SapProvider::HandoverRequestAckParams params)
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   449
{
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   450
  NS_LOG_FUNCTION (this);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   451
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   452
  NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   453
  NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   454
  NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   455
  NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   456
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   457
  NS_ASSERT_MSG (m_x2InterfaceSockets.find (params.sourceCellId) != m_x2InterfaceSockets.end (),
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   458
                 "Socket infos not defined for sourceCellId = " << params.sourceCellId);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   459
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   460
  Ptr<Socket> localSocket = m_x2InterfaceSockets [params.sourceCellId]->m_localCtrlPlaneSocket;
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   461
  Ipv4Address remoteIpAddr = m_x2InterfaceSockets [params.sourceCellId]->m_remoteIpAddr;
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   462
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   463
  NS_LOG_LOGIC ("localSocket = " << localSocket);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   464
  NS_LOG_LOGIC ("remoteIpAddr = " << remoteIpAddr);
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   465
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   466
  NS_LOG_INFO ("Send X2 message: HANDOVER REQUEST ACK");
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   467
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   468
  // Build the X2 message
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   469
  EpcX2HandoverRequestAckHeader x2HoAckHeader;
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   470
  x2HoAckHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   471
  x2HoAckHeader.SetNewEnbUeX2apId (params.newEnbUeX2apId);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   472
  x2HoAckHeader.SetAdmittedBearers (params.admittedBearers);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   473
  x2HoAckHeader.SetNotAdmittedBearers (params.notAdmittedBearers);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   474
9410
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   475
  EpcX2Header x2Header;
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   476
  x2Header.SetMessageType (EpcX2Header::SuccessfulOutcome);
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   477
  x2Header.SetProcedureCode (EpcX2Header::HandoverPreparation);
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   478
  x2Header.SetLengthOfIes (x2HoAckHeader.GetLengthOfIes ());
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   479
  x2Header.SetNumberOfIes (x2HoAckHeader.GetNumberOfIes ());
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   480
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   481
  NS_LOG_INFO ("X2 header: " << x2Header);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   482
  NS_LOG_INFO ("X2 HandoverAck header: " << x2HoAckHeader);
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   483
  NS_LOG_INFO ("RRC context: " << params.rrcContext);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   484
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   485
  // Build the X2 packet
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   486
  Ptr<Packet> packet = (params.rrcContext != 0) ? (params.rrcContext) : (Create <Packet> ());
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   487
  packet->AddHeader (x2HoAckHeader);
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   488
  packet->AddHeader (x2Header);
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   489
  NS_LOG_INFO ("packetLen = " << packet->GetSize ());
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   490
9395
8a4511204699 Use new parameters of the X2 SAP
Manuel Requena <manuel.requena@cttc.es>
parents: 9330
diff changeset
   491
  // Send the X2 message through the socket
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   492
  localSocket->SendTo (packet, 0, InetSocketAddress (remoteIpAddr, m_x2cUdpPort));
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   493
}
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   494
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   495
9404
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   496
void
9454
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   497
EpcX2::DoSendHandoverPreparationFailure (EpcX2SapProvider::HandoverPreparationFailureParams params)
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   498
{
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   499
  NS_LOG_FUNCTION (this);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   500
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   501
  NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   502
  NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   503
  NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   504
  NS_LOG_LOGIC ("cause = " << params.cause);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   505
  NS_LOG_LOGIC ("criticalityDiagnostics = " << params.criticalityDiagnostics);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   506
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   507
  NS_ASSERT_MSG (m_x2InterfaceSockets.find (params.sourceCellId) != m_x2InterfaceSockets.end (),
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   508
                 "Socket infos not defined for sourceCellId = " << params.sourceCellId);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   509
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   510
  Ptr<Socket> localSocket = m_x2InterfaceSockets [params.sourceCellId]->m_localCtrlPlaneSocket;
9454
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   511
  Ipv4Address remoteIpAddr = m_x2InterfaceSockets [params.sourceCellId]->m_remoteIpAddr;
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   512
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   513
  NS_LOG_LOGIC ("localSocket = " << localSocket);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   514
  NS_LOG_LOGIC ("remoteIpAddr = " << remoteIpAddr);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   515
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   516
  NS_LOG_INFO ("Send X2 message: HANDOVER PREPARATION FAILURE");
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   517
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   518
  // Build the X2 message
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   519
  EpcX2HandoverPreparationFailureHeader x2HoPrepFailHeader;
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   520
  x2HoPrepFailHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   521
  x2HoPrepFailHeader.SetCause (params.cause);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   522
  x2HoPrepFailHeader.SetCriticalityDiagnostics (params.criticalityDiagnostics);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   523
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   524
  EpcX2Header x2Header;
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   525
  x2Header.SetMessageType (EpcX2Header::UnsuccessfulOutcome);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   526
  x2Header.SetProcedureCode (EpcX2Header::HandoverPreparation);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   527
  x2Header.SetLengthOfIes (x2HoPrepFailHeader.GetLengthOfIes ());
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   528
  x2Header.SetNumberOfIes (x2HoPrepFailHeader.GetNumberOfIes ());
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   529
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   530
  NS_LOG_INFO ("X2 header: " << x2Header);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   531
  NS_LOG_INFO ("X2 HandoverPrepFail header: " << x2HoPrepFailHeader);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   532
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   533
  // Build the X2 packet
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   534
  Ptr<Packet> packet = Create <Packet> ();
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   535
  packet->AddHeader (x2HoPrepFailHeader);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   536
  packet->AddHeader (x2Header);
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   537
  NS_LOG_INFO ("packetLen = " << packet->GetSize ());
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   538
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   539
  // Send the X2 message through the socket
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   540
  localSocket->SendTo (packet, 0, InetSocketAddress (remoteIpAddr, m_x2cUdpPort));
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   541
}
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   542
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   543
57dad820e223 Add HandoverPreparationFailure message
Manuel Requena <manuel.requena@cttc.es>
parents: 9433
diff changeset
   544
void
9477
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   545
EpcX2::DoSendSnStatusTransfer (EpcX2SapProvider::SnStatusTransferParams params)
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   546
{
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   547
  NS_LOG_FUNCTION (this);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   548
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   549
  NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   550
  NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   551
  NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   552
  NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   553
  NS_LOG_LOGIC ("erabsList size = " << params.erabsSubjectToStatusTransferList.size ());
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   554
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   555
  NS_ASSERT_MSG (m_x2InterfaceSockets.find (params.targetCellId) != m_x2InterfaceSockets.end (),
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   556
                 "Socket infos not defined for targetCellId = " << params.targetCellId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   557
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   558
  Ptr<Socket> localSocket = m_x2InterfaceSockets [params.targetCellId]->m_localCtrlPlaneSocket;
9477
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   559
  Ipv4Address remoteIpAddr = m_x2InterfaceSockets [params.targetCellId]->m_remoteIpAddr;
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   560
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   561
  NS_LOG_LOGIC ("localSocket = " << localSocket);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   562
  NS_LOG_LOGIC ("remoteIpAddr = " << remoteIpAddr);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   563
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   564
  NS_LOG_INFO ("Send X2 message: SN STATUS TRANSFER");
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   565
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   566
  // Build the X2 message
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   567
  EpcX2SnStatusTransferHeader x2SnStatusXferHeader;
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   568
  x2SnStatusXferHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   569
  x2SnStatusXferHeader.SetNewEnbUeX2apId (params.newEnbUeX2apId);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   570
  x2SnStatusXferHeader.SetErabsSubjectToStatusTransferList (params.erabsSubjectToStatusTransferList);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   571
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   572
  EpcX2Header x2Header;
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   573
  x2Header.SetMessageType (EpcX2Header::InitiatingMessage);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   574
  x2Header.SetProcedureCode (EpcX2Header::SnStatusTransfer);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   575
  x2Header.SetLengthOfIes (x2SnStatusXferHeader.GetLengthOfIes ());
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   576
  x2Header.SetNumberOfIes (x2SnStatusXferHeader.GetNumberOfIes ());
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   577
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   578
  NS_LOG_INFO ("X2 header: " << x2Header);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   579
  NS_LOG_INFO ("X2 SnStatusTransfer header: " << x2SnStatusXferHeader);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   580
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   581
  // Build the X2 packet
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   582
  Ptr<Packet> packet = Create <Packet> ();
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   583
  packet->AddHeader (x2SnStatusXferHeader);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   584
  packet->AddHeader (x2Header);
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   585
  NS_LOG_INFO ("packetLen = " << packet->GetSize ());
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   586
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   587
  // Send the X2 message through the socket
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   588
  localSocket->SendTo (packet, 0, InetSocketAddress (remoteIpAddr, m_x2cUdpPort));
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   589
}
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   590
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   591
59d34a52beb4 Add SnStatusTransfer message
Manuel Requena <manuel.requena@cttc.es>
parents: 9454
diff changeset
   592
void
9404
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   593
EpcX2::DoSendUeContextRelease (EpcX2SapProvider::UeContextReleaseParams params)
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   594
{
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   595
  NS_LOG_FUNCTION (this);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   596
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   597
  NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   598
  NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
9412
da31245666bb Simplify handover management for multiple eNBs (i.e. different cellIds)
Manuel Requena <manuel.requena@cttc.es>
parents: 9410
diff changeset
   599
  NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
9404
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   600
9412
da31245666bb Simplify handover management for multiple eNBs (i.e. different cellIds)
Manuel Requena <manuel.requena@cttc.es>
parents: 9410
diff changeset
   601
  NS_ASSERT_MSG (m_x2InterfaceSockets.find (params.sourceCellId) != m_x2InterfaceSockets.end (),
da31245666bb Simplify handover management for multiple eNBs (i.e. different cellIds)
Manuel Requena <manuel.requena@cttc.es>
parents: 9410
diff changeset
   602
                 "Socket infos not defined for sourceCellId = " << params.sourceCellId);
9404
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   603
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   604
  Ptr<Socket> localSocket = m_x2InterfaceSockets [params.sourceCellId]->m_localCtrlPlaneSocket;
9412
da31245666bb Simplify handover management for multiple eNBs (i.e. different cellIds)
Manuel Requena <manuel.requena@cttc.es>
parents: 9410
diff changeset
   605
  Ipv4Address remoteIpAddr = m_x2InterfaceSockets [params.sourceCellId]->m_remoteIpAddr;
9404
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   606
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   607
  NS_LOG_LOGIC ("localSocket = " << localSocket);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   608
  NS_LOG_LOGIC ("remoteIpAddr = " << remoteIpAddr);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   609
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   610
  NS_LOG_INFO ("Send X2 message: UE CONTEXT RELEASE");
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   611
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   612
  // Build the X2 message
9410
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   613
  EpcX2UeContextReleaseHeader x2UeCtxReleaseHeader;
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   614
  x2UeCtxReleaseHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   615
  x2UeCtxReleaseHeader.SetNewEnbUeX2apId (params.newEnbUeX2apId);
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   616
9404
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   617
  EpcX2Header x2Header;
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   618
  x2Header.SetMessageType (EpcX2Header::InitiatingMessage);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   619
  x2Header.SetProcedureCode (EpcX2Header::UeContextRelease);
9410
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   620
  x2Header.SetLengthOfIes (x2UeCtxReleaseHeader.GetLengthOfIes ());
fa212cd4e671 management of the bearers in the X2 messages
Manuel Requena <manuel.requena@cttc.es>
parents: 9404
diff changeset
   621
  x2Header.SetNumberOfIes (x2UeCtxReleaseHeader.GetNumberOfIes ());
9404
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   622
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   623
  NS_LOG_INFO ("X2 header: " << x2Header);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   624
  NS_LOG_INFO ("X2 UeContextRelease header: " << x2UeCtxReleaseHeader);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   625
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   626
  // Build the X2 packet
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   627
  Ptr<Packet> packet = Create <Packet> ();
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   628
  packet->AddHeader (x2UeCtxReleaseHeader);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   629
  packet->AddHeader (x2Header);
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   630
  NS_LOG_INFO ("packetLen = " << packet->GetSize ());
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   631
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   632
  // Send the X2 message through the socket
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   633
  localSocket->SendTo (packet, 0, InetSocketAddress (remoteIpAddr, m_x2cUdpPort));
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   634
}
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   635
1f737f190823 Add UE Context Release X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9403
diff changeset
   636
9416
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   637
void
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   638
EpcX2::DoSendLoadInformation (EpcX2SapProvider::LoadInformationParams params)
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   639
{
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   640
  NS_LOG_FUNCTION (this);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   641
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   642
  NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   643
  NS_LOG_LOGIC ("cellInformationList size = " << params.cellInformationList.size ());
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   644
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   645
  NS_ASSERT_MSG (m_x2InterfaceSockets.find (params.targetCellId) != m_x2InterfaceSockets.end (),
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   646
                 "Missing infos for targetCellId = " << params.targetCellId);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   647
  Ptr<X2IfaceInfo> socketInfo = m_x2InterfaceSockets [params.targetCellId];
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   648
  Ptr<Socket> sourceSocket = socketInfo->m_localCtrlPlaneSocket;
9416
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   649
  Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   650
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   651
  NS_LOG_LOGIC ("sourceSocket = " << sourceSocket);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   652
  NS_LOG_LOGIC ("targetIpAddr = " << targetIpAddr);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   653
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   654
  NS_LOG_INFO ("Send X2 message: LOAD INFORMATION");
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   655
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   656
  // Build the X2 message
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   657
  EpcX2LoadInformationHeader x2LoadInfoHeader;
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   658
  x2LoadInfoHeader.SetCellInformationList (params.cellInformationList);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   659
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   660
  EpcX2Header x2Header;
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   661
  x2Header.SetMessageType (EpcX2Header::InitiatingMessage);
9433
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   662
  x2Header.SetProcedureCode (EpcX2Header::LoadIndication);
9416
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   663
  x2Header.SetLengthOfIes (x2LoadInfoHeader.GetLengthOfIes ());
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   664
  x2Header.SetNumberOfIes (x2LoadInfoHeader.GetNumberOfIes ());
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   665
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   666
  NS_LOG_INFO ("X2 header: " << x2Header);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   667
  NS_LOG_INFO ("X2 LoadInformation header: " << x2LoadInfoHeader);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   668
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   669
  // Build the X2 packet
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   670
  Ptr<Packet> packet = Create <Packet> ();
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   671
  packet->AddHeader (x2LoadInfoHeader);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   672
  packet->AddHeader (x2Header);
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   673
  NS_LOG_INFO ("packetLen = " << packet->GetSize ());
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   674
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   675
  // Send the X2 message through the socket
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   676
  sourceSocket->SendTo (packet, 0, InetSocketAddress (targetIpAddr, m_x2cUdpPort));
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   677
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   678
}
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   679
7d95ab53c4cf Add Load Information X2 message
Manuel Requena <manuel.requena@cttc.es>
parents: 9412
diff changeset
   680
9433
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   681
void
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   682
EpcX2::DoSendResourceStatusUpdate (EpcX2SapProvider::ResourceStatusUpdateParams params)
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   683
{
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   684
  NS_LOG_FUNCTION (this);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   685
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   686
  NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   687
  NS_LOG_LOGIC ("enb1MeasurementId = " << params.enb1MeasurementId);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   688
  NS_LOG_LOGIC ("enb2MeasurementId = " << params.enb2MeasurementId);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   689
  NS_LOG_LOGIC ("cellMeasurementResultList size = " << params.cellMeasurementResultList.size ());
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   690
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   691
  NS_ASSERT_MSG (m_x2InterfaceSockets.find (params.targetCellId) != m_x2InterfaceSockets.end (),
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   692
                 "Missing infos for targetCellId = " << params.targetCellId);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   693
  Ptr<X2IfaceInfo> socketInfo = m_x2InterfaceSockets [params.targetCellId];
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   694
  Ptr<Socket> sourceSocket = socketInfo->m_localCtrlPlaneSocket;
9433
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   695
  Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   696
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   697
  NS_LOG_LOGIC ("sourceSocket = " << sourceSocket);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   698
  NS_LOG_LOGIC ("targetIpAddr = " << targetIpAddr);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   699
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   700
  NS_LOG_INFO ("Send X2 message: RESOURCE STATUS UPDATE");
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   701
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   702
  // Build the X2 message
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   703
  EpcX2ResourceStatusUpdateHeader x2ResourceStatUpdHeader;
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   704
  x2ResourceStatUpdHeader.SetEnb1MeasurementId (params.enb1MeasurementId);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   705
  x2ResourceStatUpdHeader.SetEnb2MeasurementId (params.enb2MeasurementId);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   706
  x2ResourceStatUpdHeader.SetCellMeasurementResultList (params.cellMeasurementResultList);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   707
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   708
  EpcX2Header x2Header;
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   709
  x2Header.SetMessageType (EpcX2Header::InitiatingMessage);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   710
  x2Header.SetProcedureCode (EpcX2Header::ResourceStatusReporting);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   711
  x2Header.SetLengthOfIes (x2ResourceStatUpdHeader.GetLengthOfIes ());
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   712
  x2Header.SetNumberOfIes (x2ResourceStatUpdHeader.GetNumberOfIes ());
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   713
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   714
  NS_LOG_INFO ("X2 header: " << x2Header);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   715
  NS_LOG_INFO ("X2 ResourceStatusUpdate header: " << x2ResourceStatUpdHeader);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   716
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   717
  // Build the X2 packet
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   718
  Ptr<Packet> packet = Create <Packet> ();
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   719
  packet->AddHeader (x2ResourceStatUpdHeader);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   720
  packet->AddHeader (x2Header);
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   721
  NS_LOG_INFO ("packetLen = " << packet->GetSize ());
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   722
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   723
  // Send the X2 message through the socket
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   724
  sourceSocket->SendTo (packet, 0, InetSocketAddress (targetIpAddr, m_x2cUdpPort));
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   725
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   726
}
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   727
d5700444db81 Add ResourceStatusUpdate message
Manuel Requena <manuel.requena@cttc.es>
parents: 9416
diff changeset
   728
9553
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   729
void
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   730
EpcX2::DoSendUeData (EpcX2SapProvider::UeDataParams params)
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   731
{
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   732
  NS_LOG_FUNCTION (this);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   733
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   734
  NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   735
  NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   736
  NS_LOG_LOGIC ("gtpTeid = " << params.gtpTeid);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   737
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   738
  NS_ASSERT_MSG (m_x2InterfaceSockets.find (params.targetCellId) != m_x2InterfaceSockets.end (),
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   739
                 "Missing infos for targetCellId = " << params.targetCellId);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   740
  Ptr<X2IfaceInfo> socketInfo = m_x2InterfaceSockets [params.targetCellId];
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   741
  Ptr<Socket> sourceSocket = socketInfo->m_localUserPlaneSocket;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   742
  Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   743
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   744
  NS_LOG_LOGIC ("sourceSocket = " << sourceSocket);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   745
  NS_LOG_LOGIC ("targetIpAddr = " << targetIpAddr);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   746
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   747
  GtpuHeader gtpu;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   748
  gtpu.SetTeid (params.gtpTeid);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   749
  gtpu.SetLength (params.ueData->GetSize () + gtpu.GetSerializedSize () - 8); // TODO This should be done in GtpuHeader
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   750
  NS_LOG_INFO ("GTP-U header: " << gtpu);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   751
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   752
  Ptr<Packet> packet = params.ueData;
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   753
  packet->AddHeader (gtpu);
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   754
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   755
  NS_LOG_INFO ("Forward UE DATA through X2 interface");
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   756
  sourceSocket->SendTo (packet, 0, InetSocketAddress (targetIpAddr, m_x2uUdpPort));
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   757
}
ec2c02fa48f5 Add X2-U interface
Manuel Requena <manuel.requena@cttc.es>
parents: 9477
diff changeset
   758
9330
f1e0bd751bb7 Add X2 entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   759
} // namespace ns3