A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
a2-a4-rsrq-handover-algorithm.h
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
4  * Copyright (c) 2013 Budiarto Herman
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Original work authors (from lte-enb-rrc.cc):
20  * - Nicola Baldo <nbaldo@cttc.es>
21  * - Marco Miozzo <mmiozzo@cttc.es>
22  * - Manuel Requena <manuel.requena@cttc.es>
23  *
24  * Converted to handover algorithm interface by:
25  * - Budiarto Herman <budiarto.herman@magister.fi>
26  */
27 
28 #ifndef A2_A4_RSRQ_HANDOVER_ALGORITHM_H
29 #define A2_A4_RSRQ_HANDOVER_ALGORITHM_H
30 
31 #include <ns3/lte-handover-algorithm.h>
32 #include <ns3/lte-handover-management-sap.h>
33 #include <ns3/lte-rrc-sap.h>
34 #include <ns3/simple-ref-count.h>
35 #include <ns3/ptr.h>
36 #include <map>
37 
38 namespace ns3 {
39 
40 
81 {
82 public:
87 
88  virtual ~A2A4RsrqHandoverAlgorithm ();
89 
90  // inherited from Object
91  static TypeId GetTypeId ();
92 
93  // inherited from LteHandoverAlgorithm
96 
97  // let the forwarder class access the protected and private members
99 
100 protected:
101  // inherited from Object
102  virtual void DoInitialize ();
103  virtual void DoDispose ();
104 
105  // inherited from LteHandoverAlgorithm as a Handover Management SAP implementation
106  void DoReportUeMeas (uint16_t rnti, LteRrcSap::MeasResults measResults);
107 
108 private:
109  // Internal methods
110  void EvaluateHandover (uint16_t rnti, uint8_t servingCellRsrq);
111  bool IsValidNeighbour (uint16_t cellId);
112  void UpdateNeighbourMeasurements (uint16_t rnti, uint16_t cellId,
113  uint8_t rsrq);
114 
115  // The expected measurement identities
116  uint8_t m_a2MeasId;
117  uint8_t m_a4MeasId;
118 
124  class UeMeasure : public SimpleRefCount<UeMeasure>
125  {
126  public:
127  uint16_t m_cellId;
128  uint8_t m_rsrp;
129  uint8_t m_rsrq;
130  };
131 
132  // cellId
133  typedef std::map<uint16_t, Ptr<UeMeasure> > MeasurementRow_t;
134  // rnti
135  typedef std::map<uint16_t, MeasurementRow_t> MeasurementTable_t;
137 
138  // Class attributes
141 
142  // Handover Management SAPs
145 
146 }; // end of class A2A4RsrqHandoverAlgorithm
147 
148 
149 } // end of namespace ns3
150 
151 
152 #endif /* A2_A4_RSRQ_HANDOVER_ALGORITHM_H */
The abstract base class of a handover algorithm that operates using the Handover Management SAP inter...
virtual void SetLteHandoverManagementSapUser(LteHandoverManagementSapUser *s)
Set the "user" part of the Handover Management SAP interface that this handover algorithm instance wi...
LteHandoverManagementSapProvider * m_handoverManagementSapProvider
virtual LteHandoverManagementSapProvider * GetLteHandoverManagementSapProvider()
Export the "provider" part of the Handover Management SAP interface.
A2A4RsrqHandoverAlgorithm()
Creates an A2-A4-RSRQ handover algorithm instance.
Handover algorithm implementation based on RSRQ measurements, Event A2 and Event A4.
void DoReportUeMeas(uint16_t rnti, LteRrcSap::MeasResults measResults)
Implementation of LteHandoverManagementSapProvider::ReportUeMeas.
LteHandoverManagementSapUser * m_handoverManagementSapUser
virtual void DoInitialize()
This method is called only once by Object::Initialize.
Ptr< SampleEmitter > s
Template for the implementation of the LteHandoverManagementSapProvider as a member of an owner class...
std::map< uint16_t, MeasurementRow_t > MeasurementTable_t
Service Access Point (SAP) offered by the handover algorithm instance to the eNodeB RRC instance...
void UpdateNeighbourMeasurements(uint16_t rnti, uint16_t cellId, uint8_t rsrq)
std::map< uint16_t, Ptr< UeMeasure > > MeasurementRow_t
void EvaluateHandover(uint16_t rnti, uint8_t servingCellRsrq)
virtual void DoDispose()
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
A template-based reference counting class.
a unique identifier for an interface.
Definition: type-id.h:49
Service Access Point (SAP) offered by the eNodeB RRC instance to the handover algorithm instance...
Measurements reported by a UE for a cell ID.