/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Manuel Requena <manuel.requena@cttc.es>
*/
#ifndef EPC_X2_HEADER_H
#define EPC_X2_HEADER_H
#include "ns3/epc-x2-sap.h"
#include "ns3/header.h"
#include <vector>
namespace ns3 {
class EpcX2Header : public Header
{
public:
EpcX2Header ();
virtual ~EpcX2Header ();
static TypeId GetTypeId (void);
virtual TypeId GetInstanceTypeId (void) const;
virtual uint32_t GetSerializedSize (void) const;
virtual void Serialize (Buffer::Iterator start) const;
virtual uint32_t Deserialize (Buffer::Iterator start);
virtual void Print (std::ostream &os) const;
uint8_t GetMessageType () const;
void SetMessageType (uint8_t messageType);
uint8_t GetProcedureCode () const;
void SetProcedureCode (uint8_t procedureCode);
void SetLengthOfIes (uint32_t lengthOfIes);
void SetNumberOfIes (uint32_t numberOfIes);
enum ProcedureCode_t {
HandoverPreparation = 0
};
enum TypeOfMessage_t {
InitiatingMessage = 0,
SuccessfulOutcome = 1,
UnsuccessfulOutcome = 2
};
private:
uint32_t m_headerLength;
uint8_t m_messageType;
uint8_t m_procedureCode;
uint32_t m_lengthOfIes;
uint32_t m_numberOfIes;
};
class EpcX2HandoverRequestHeader : public Header
{
public:
EpcX2HandoverRequestHeader ();
virtual ~EpcX2HandoverRequestHeader ();
static TypeId GetTypeId (void);
virtual TypeId GetInstanceTypeId (void) const;
virtual uint32_t GetSerializedSize (void) const;
virtual void Serialize (Buffer::Iterator start) const;
virtual uint32_t Deserialize (Buffer::Iterator start);
virtual void Print (std::ostream &os) const;
uint16_t GetOldEnbUeX2apId () const;
void SetOldEnbUeX2apId (uint16_t x2apId);
uint16_t GetCause () const;
void SetCause (uint16_t cause);
uint16_t GetTargetCellId () const;
void SetTargetCellId (uint16_t targetCellId);
std::vector <EpcX2Sap::ErabToBeSetupItem> GetBearers () const;
void SetBearers (std::vector <EpcX2Sap::ErabToBeSetupItem> bearers);
uint64_t GetUeAggregateMaxBitRateDownlink () const;
void SetUeAggregateMaxBitRateDownlink (uint64_t bitRate);
uint64_t GetUeAggregateMaxBitRateUplink () const;
void SetUeAggregateMaxBitRateUplink (uint64_t bitRate);
uint32_t GetLengthOfIes () const;
uint32_t GetNumberOfIes () const;
private:
uint32_t m_numberOfIes;
uint32_t m_headerLength;
uint16_t m_oldEnbUeX2apId;
uint16_t m_cause;
uint16_t m_targetCellId;
uint64_t m_ueAggregateMaxBitRateDownlink;
uint64_t m_ueAggregateMaxBitRateUplink;
std::vector <EpcX2Sap::ErabToBeSetupItem> m_erabsToBeSetupList;
};
class EpcX2HandoverRequestAckHeader : public Header
{
public:
EpcX2HandoverRequestAckHeader ();
virtual ~EpcX2HandoverRequestAckHeader ();
static TypeId GetTypeId (void);
virtual TypeId GetInstanceTypeId (void) const;
virtual uint32_t GetSerializedSize (void) const;
virtual void Serialize (Buffer::Iterator start) const;
virtual uint32_t Deserialize (Buffer::Iterator start);
virtual void Print (std::ostream &os) const;
uint16_t GetOldEnbUeX2apId () const;
void SetOldEnbUeX2apId (uint16_t x2apId);
uint16_t GetNewEnbUeX2apId () const;
void SetNewEnbUeX2apId (uint16_t x2apId);
std::vector <EpcX2Sap::ErabAdmittedItem> GetAdmittedBearers () const;
void SetAdmittedBearers (std::vector <EpcX2Sap::ErabAdmittedItem> bearers);
std::vector <EpcX2Sap::ErabNotAdmittedItem> GetNotAdmittedBearers () const;
void SetNotAdmittedBearers (std::vector <EpcX2Sap::ErabNotAdmittedItem> bearers);
private:
uint16_t m_oldEnbUeX2apId;
uint16_t m_newEnbUeX2apId;
std::vector <EpcX2Sap::ErabAdmittedItem> m_erabsAdmittedList;
std::vector <EpcX2Sap::ErabNotAdmittedItem> m_erabsNotAdmittedList;
};
} // namespace ns3
#endif // EPC_X2_HEADER_H