src/lte/model/lte-ue-mac.cc
author CTTC
Thu, 10 Mar 2011 18:57:41 +0100
changeset 7887 78911c978517
parent 7886 b65c16d4da83
child 7920 dd522ac64b64
permissions -rw-r--r--
renamed several LTE files and classes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     2
/*
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     3
 * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     4
 *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     7
 * published by the Free Software Foundation;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     8
 *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    12
 * GNU General Public License for more details.
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    13
 *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    17
 *
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    18
 * Author: Nicola Baldo  <nbaldo@cttc.es>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    19
 * Author: Marco Miozzo <mmiozzo@cttc.es>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    20
 */
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    21
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    22
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    23
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    24
#include <ns3/log.h>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    25
#include <ns3/pointer.h>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    26
#include <ns3/packet.h>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    27
#include <ns3/packet-burst.h>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    28
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    29
#include "lte-ue-mac.h"
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
    30
#include "lte-ue-net-device.h"
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    31
#include "lte-mac-tag.h"
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    32
#include <ns3/ff-mac-common.h>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    33
#include <ns3/ideal-control-messages.h>
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    34
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    35
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    36
NS_LOG_COMPONENT_DEFINE ("LteUeMac");
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    37
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    38
namespace ns3 {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    39
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    40
NS_OBJECT_ENSURE_REGISTERED (LteUeMac);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    41
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    42
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    43
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    44
int BufferSizeLevelBsr[64] = {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    45
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    46
  0, 10, 12, 14, 17, 19, 22, 26, 31, 36, 42, 49, 57, 67, 78, 91, 107, 125, 146,
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    47
  171, 200, 234, 274, 321, 376, 440, 515, 603, 706, 826, 967, 1132, 1326, 1552,
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    48
  1817, 2127, 2490, 2915, 3413, 3995, 4677, 5476, 6411, 7505, 8787, 10287,
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    49
  12043, 14099, 16507, 19325, 22624, 26487, 31009, 36304, 42502, 49759, 58255,
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    50
  68201, 79846, 93749, 109439, 128125, 150000, 150000
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    51
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    52
};
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    53
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    54
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    55
///////////////////////////////////////////////////////////
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    56
// SAP forwarders
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    57
///////////////////////////////////////////////////////////
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    58
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    59
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    60
class UeMemberLteUeCmacSapProvider : public LteUeCmacSapProvider
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    61
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    62
public:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    63
  UeMemberLteUeCmacSapProvider (LteUeMac* mac);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    64
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    65
  // inherited from LteUeCmacSapProvider
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    66
  virtual void ConfigureUe (uint16_t rnti);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    67
  virtual void AddLc (uint8_t lcId, LteMacSapUser* msu);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    68
  virtual void RemoveLc (uint8_t lcId);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    69
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    70
private:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    71
  LteUeMac* m_mac;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    72
};
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    73
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    74
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    75
UeMemberLteUeCmacSapProvider::UeMemberLteUeCmacSapProvider (LteUeMac* mac)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    76
  : m_mac (mac)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    77
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    78
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    79
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    80
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    81
UeMemberLteUeCmacSapProvider::ConfigureUe (uint16_t rnti)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    82
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    83
  m_mac->DoConfigureUe (rnti);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    84
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    85
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    86
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    87
UeMemberLteUeCmacSapProvider::AddLc (uint8_t lcId, LteMacSapUser* msu)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    88
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    89
  m_mac->DoAddLc (lcId, msu);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    90
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    91
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    92
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    93
UeMemberLteUeCmacSapProvider::RemoveLc (uint8_t lcid)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    94
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    95
  m_mac->DoRemoveLc (lcid);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    96
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    97
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    98
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    99
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   100
class UeMemberLteMacSapProvider : public LteMacSapProvider
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   101
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   102
public:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   103
  UeMemberLteMacSapProvider (LteUeMac* mac);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   104
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   105
  // inherited from LteMacSapProvider
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   106
  virtual void TransmitPdu (TransmitPduParameters params);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   107
  virtual void ReportBufferStatus (ReportBufferStatusParameters params);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   108
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   109
private:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   110
  LteUeMac* m_mac;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   111
};
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   112
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   113
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   114
UeMemberLteMacSapProvider::UeMemberLteMacSapProvider (LteUeMac* mac)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   115
  : m_mac (mac)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   116
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   117
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   118
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   119
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   120
UeMemberLteMacSapProvider::TransmitPdu (TransmitPduParameters params)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   121
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   122
  m_mac->DoTransmitPdu (params);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   123
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   124
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   125
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   126
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   127
UeMemberLteMacSapProvider::ReportBufferStatus (ReportBufferStatusParameters params)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   128
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   129
  m_mac->DoReportBufferStatus (params);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   130
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   131
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   132
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   133
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   134
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   135
class UeMemberLteUePhySapUser : public LteUePhySapUser
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   136
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   137
public:
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   138
  UeMemberLteUePhySapUser (LteUeMac* mac);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   139
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   140
  // inherited from LtePhySapUser
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   141
  virtual void ReceivePhyPdu (Ptr<Packet> p);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   142
  virtual void SubframeIndication (uint32_t frameNo, uint32_t subframeNo);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   143
  virtual void ReceiveIdealControlMessage (Ptr<IdealControlMessage> msg);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   144
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   145
private:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   146
  LteUeMac* m_mac;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   147
};
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   148
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   149
UeMemberLteUePhySapUser::UeMemberLteUePhySapUser (LteUeMac* mac) : m_mac (mac)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   150
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   151
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   152
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   153
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   154
void
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   155
UeMemberLteUePhySapUser::ReceivePhyPdu (Ptr<Packet> p)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   156
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   157
  m_mac->DoReceivePhyPdu (p);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   158
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   159
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   160
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   161
void
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   162
UeMemberLteUePhySapUser::SubframeIndication (uint32_t frameNo, uint32_t subframeNo)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   163
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   164
  NS_LOG_LOGIC (this << " UE-MAC does not yet support this primitive");
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   165
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   166
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   167
void
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   168
UeMemberLteUePhySapUser::ReceiveIdealControlMessage (Ptr<IdealControlMessage> msg)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   169
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   170
  m_mac->DoReceiveIdealControlMessage (msg);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   171
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   172
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   173
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   174
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   175
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   176
//////////////////////////////////////////////////////////
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   177
// LteUeMac methods
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   178
///////////////////////////////////////////////////////////
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   179
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   180
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   181
TypeId
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   182
LteUeMac::GetTypeId (void)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   183
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   184
  static TypeId tid = TypeId ("ns3::LteUeMac")
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   185
    .SetParent<Object> ()
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   186
    .AddConstructor<LteUeMac> ();
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   187
  return tid;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   188
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   189
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   190
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   191
LteUeMac::LteUeMac ()
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   192
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   193
  m_macSapProvider = new UeMemberLteMacSapProvider (this);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   194
  m_cmacSapProvider = new UeMemberLteUeCmacSapProvider (this);
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   195
  m_uePhySapUser = new UeMemberLteUePhySapUser (this);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   196
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   197
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   198
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   199
LteUeMac::~LteUeMac ()
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   200
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   201
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   202
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   203
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   204
LteUeMac::DoDispose ()
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   205
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   206
  delete m_macSapProvider;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   207
  delete m_cmacSapProvider;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   208
  Object::DoDispose ();
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   209
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   210
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   211
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   212
LteUePhySapUser*
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   213
LteUeMac::GetLteUePhySapUser (void)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   214
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   215
  return m_uePhySapUser;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   216
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   217
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   218
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   219
LteUeMac::SetLteUePhySapProvider (LteUePhySapProvider* s)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   220
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   221
  m_uePhySapProvider = s;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   222
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   223
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   224
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   225
LteMacSapProvider*
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   226
LteUeMac::GetLteMacSapProvider (void)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   227
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   228
  return m_macSapProvider;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   229
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   230
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   231
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   232
LteUeMac::SetLteUeCmacSapUser (LteUeCmacSapUser* s)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   233
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   234
  m_cmacSapUser = s;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   235
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   236
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   237
LteUeCmacSapProvider*
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   238
LteUeMac::GetLteUeCmacSapProvider (void)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   239
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   240
  return m_cmacSapProvider;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   241
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   242
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   243
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   244
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   245
LteUeMac::DoTransmitPdu (LteMacSapProvider::TransmitPduParameters params)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   246
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   247
  NS_LOG_FUNCTION (this);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   248
  NS_ASSERT_MSG (m_rnti == params.rnti, "RNTI mismatch between RLC and MAC");
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   249
  LteMacTag tag (params.rnti, params.lcid);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   250
  params.pdu->AddPacketTag (tag);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   251
//   Ptr<PacketBurst> pb = CreateObject<PacketBurst> ();
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   252
//   pb->AddPacket (params.pdu);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   253
  m_uePhySapProvider->SendMacPdu (params.pdu);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   254
  // Uplink not implemented yet, so we wait can wait for the PHY SAP
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   255
  // to be defined before we implement the transmission method.
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   256
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   257
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   258
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   259
LteUeMac::DoReportBufferStatus (LteMacSapProvider::ReportBufferStatusParameters params)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   260
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   261
  NS_LOG_FUNCTION (this);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   262
  MacCeListElement_s bsr;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   263
  bsr.m_rnti = m_rnti;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   264
  bsr.m_macCeType = MacCeListElement_s::BSR;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   265
  // short BSR
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   266
  int queue = params.txQueueSize;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   267
  int index = 0;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   268
  if (BufferSizeLevelBsr[63] < queue)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   269
    {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   270
      index = 63;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   271
    }
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   272
  else
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   273
    {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   274
      while (BufferSizeLevelBsr[index] < queue)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   275
        {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   276
          index++;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   277
        }
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   278
    }
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   279
  bsr.m_macCeValue.m_bufferStatus.push_back (index);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   280
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   281
  // create the feedback to eNB
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   282
  Ptr<BsrIdealControlMessage> msg = Create<BsrIdealControlMessage> ();
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   283
  msg->SetBsr (bsr);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   284
  m_uePhySapProvider->SendIdealControlMessage (msg);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   285
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   286
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   287
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   288
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   289
LteUeMac::DoConfigureUe (uint16_t rnti)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   290
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   291
  NS_LOG_FUNCTION (this << " rnti" << rnti);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   292
  m_rnti = rnti;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   293
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   294
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   295
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   296
LteUeMac::DoAddLc (uint8_t lcId, LteMacSapUser* msu)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   297
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   298
  NS_LOG_FUNCTION (this << " lcId" << lcId);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   299
  NS_ASSERT_MSG (m_macSapUserMap.find (lcId) == m_macSapUserMap.end (), "cannot add channel because LCID " << lcId << " is already present");
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   300
  m_macSapUserMap[lcId] = msu;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   301
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   302
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   303
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   304
LteUeMac::DoRemoveLc (uint8_t lcId)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   305
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   306
  NS_LOG_FUNCTION (this << " lcId" << lcId);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   307
  NS_ASSERT_MSG (m_macSapUserMap.find (lcId) == m_macSapUserMap.end (), "could not find LCID " << lcId);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   308
  m_macSapUserMap.erase (lcId);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   309
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   310
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   311
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   312
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   313
LteUeMac::DoReceivePhyPdu (Ptr<Packet> p)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   314
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   315
  LteMacTag tag;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   316
  p->RemovePacketTag (tag);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   317
  if (tag.GetRnti () == m_rnti)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   318
    {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   319
      // packet is for the current user
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   320
      std::map <uint8_t, LteMacSapUser*>::const_iterator it = m_macSapUserMap.find (tag.GetLcid ());
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   321
      NS_ASSERT_MSG (it != m_macSapUserMap.end (), "received packet with unknown lcid");
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   322
      it->second->ReceivePdu (p);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   323
    }
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   324
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   325
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   326
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   327
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   328
LteUeMac::DoReceiveIdealControlMessage (Ptr<IdealControlMessage> msg)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   329
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   330
  NS_LOG_FUNCTION (this);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   331
  if (msg->GetMessageType () == IdealControlMessage::UL_DCI)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   332
    {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   333
      Ptr<UlDciIdealControlMessage> msg2 = DynamicCast<UlDciIdealControlMessage> (msg);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   334
      UlDciListElement_s dci = msg2->GetDci ();
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   335
      std::map <uint8_t, LteMacSapUser*>::iterator it; 
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   336
      it = m_macSapUserMap.begin ();  // use only the first LC --> UE-SCHEDULER??
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   337
      (*it).second->NotifyTxOpportunity (dci.m_tbSize);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   338
      
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   339
    }
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   340
  else
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   341
    {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   342
      NS_LOG_FUNCTION (this << " IdealControlMessage not recognized");
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   343
    }
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   344
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   345
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   346
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   347
} // namespace ns3