src/lte/model/lte-ue-mac.cc
author Marco Miozzo <marco.miozzo@cttc.es>
Fri, 15 Jun 2012 16:49:51 +0200
changeset 9035 e40974228d94
parent 8763 bac46543614f
child 9036 5e09b29d4af5
permissions -rw-r--r--
Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
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"
8462
cf6a48994db5 renamed LteMacTag --> LteRadioBearerTag
Nicola Baldo <nbaldo@cttc.es>
parents: 8436
diff changeset
    31
#include "lte-radio-bearer-tag.h"
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    32
#include <ns3/ff-mac-common.h>
9035
e40974228d94 Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8763
diff changeset
    33
#include <ns3/lte-control-messages.h>
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
    34
#include <ns3/simulator.h>
8435
6b0542a91970 Transmission queue head-of-line delay and queue size at MAC Scheduler
mmiozzo
parents: 8416
diff changeset
    35
#include <ns3/lte-common.h>
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    36
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    37
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    38
NS_LOG_COMPONENT_DEFINE ("LteUeMac");
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    39
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    40
namespace ns3 {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    41
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    42
NS_OBJECT_ENSURE_REGISTERED (LteUeMac);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    43
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    44
8436
c5b3b5ba81be Remove BufferSizeLevelBsr table in LteUeMac, moved to lte-common
mmiozzo
parents: 8435
diff changeset
    45
///////////////////////////////////////////////////////////
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    46
// SAP forwarders
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    47
///////////////////////////////////////////////////////////
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    48
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    49
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    50
class UeMemberLteUeCmacSapProvider : public LteUeCmacSapProvider
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    51
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    52
public:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    53
  UeMemberLteUeCmacSapProvider (LteUeMac* mac);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    54
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    55
  // inherited from LteUeCmacSapProvider
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    56
  virtual void ConfigureUe (uint16_t rnti);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    57
  virtual void AddLc (uint8_t lcId, LteMacSapUser* msu);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    58
  virtual void RemoveLc (uint8_t lcId);
8714
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
    59
  virtual void RrcUpdateConfigurationReq (LteUeConfig_t params);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    60
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    61
private:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    62
  LteUeMac* m_mac;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    63
};
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    64
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    65
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    66
UeMemberLteUeCmacSapProvider::UeMemberLteUeCmacSapProvider (LteUeMac* mac)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    67
  : m_mac (mac)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    68
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    69
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    70
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    71
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    72
UeMemberLteUeCmacSapProvider::ConfigureUe (uint16_t rnti)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    73
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    74
  m_mac->DoConfigureUe (rnti);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    75
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    76
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    77
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    78
UeMemberLteUeCmacSapProvider::AddLc (uint8_t lcId, LteMacSapUser* msu)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    79
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    80
  m_mac->DoAddLc (lcId, msu);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    81
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    82
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    83
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    84
UeMemberLteUeCmacSapProvider::RemoveLc (uint8_t lcid)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    85
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    86
  m_mac->DoRemoveLc (lcid);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    87
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    88
8714
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
    89
void
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
    90
UeMemberLteUeCmacSapProvider::RrcUpdateConfigurationReq (LteUeConfig_t params)
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
    91
{
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
    92
  m_mac->DoRrcUpdateConfigurationReq (params);
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
    93
}
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    94
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    95
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    96
class UeMemberLteMacSapProvider : public LteMacSapProvider
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    97
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    98
public:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
    99
  UeMemberLteMacSapProvider (LteUeMac* mac);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   100
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   101
  // inherited from LteMacSapProvider
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   102
  virtual void TransmitPdu (TransmitPduParameters params);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   103
  virtual void ReportBufferStatus (ReportBufferStatusParameters params);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   104
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   105
private:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   106
  LteUeMac* m_mac;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   107
};
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   108
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   109
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   110
UeMemberLteMacSapProvider::UeMemberLteMacSapProvider (LteUeMac* mac)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   111
  : m_mac (mac)
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
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   115
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   116
UeMemberLteMacSapProvider::TransmitPdu (TransmitPduParameters params)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   117
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   118
  m_mac->DoTransmitPdu (params);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   119
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   120
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   121
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   122
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   123
UeMemberLteMacSapProvider::ReportBufferStatus (ReportBufferStatusParameters params)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   124
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   125
  m_mac->DoReportBufferStatus (params);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   126
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   127
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   128
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   129
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   130
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   131
class UeMemberLteUePhySapUser : public LteUePhySapUser
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   132
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   133
public:
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   134
  UeMemberLteUePhySapUser (LteUeMac* mac);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   135
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   136
  // inherited from LtePhySapUser
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   137
  virtual void ReceivePhyPdu (Ptr<Packet> p);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   138
  virtual void SubframeIndication (uint32_t frameNo, uint32_t subframeNo);
9035
e40974228d94 Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8763
diff changeset
   139
  virtual void ReceiveLteControlMessage (Ptr<LteControlMessage> msg);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   140
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   141
private:
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   142
  LteUeMac* m_mac;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   143
};
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   144
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   145
UeMemberLteUePhySapUser::UeMemberLteUePhySapUser (LteUeMac* mac) : m_mac (mac)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   146
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   147
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   148
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   149
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   150
void
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   151
UeMemberLteUePhySapUser::ReceivePhyPdu (Ptr<Packet> p)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   152
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   153
  m_mac->DoReceivePhyPdu (p);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   154
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   155
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   156
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   157
void
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   158
UeMemberLteUePhySapUser::SubframeIndication (uint32_t frameNo, uint32_t subframeNo)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   159
{
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   160
  m_mac->DoSubframeIndication (frameNo, subframeNo);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   161
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   162
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   163
void
9035
e40974228d94 Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8763
diff changeset
   164
UeMemberLteUePhySapUser::ReceiveLteControlMessage (Ptr<LteControlMessage> msg)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   165
{
9035
e40974228d94 Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8763
diff changeset
   166
  m_mac->DoReceiveLteControlMessage (msg);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   167
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   168
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   169
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   170
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
// LteUeMac methods
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
TypeId
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   178
LteUeMac::GetTypeId (void)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   179
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   180
  static TypeId tid = TypeId ("ns3::LteUeMac")
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   181
    .SetParent<Object> ()
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   182
    .AddConstructor<LteUeMac> ();
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   183
  return tid;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   184
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   185
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   186
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   187
LteUeMac::LteUeMac ()
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   188
  :  m_bsrPeriodicity (MilliSeconds (1)), // ideal behavior
8496
8d1759a15c2e Update LteUeMac for sending BSR only when new BSR are received from RLC
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8462
diff changeset
   189
  m_bsrLast (MilliSeconds (0)),
8d1759a15c2e Update LteUeMac for sending BSR only when new BSR are received from RLC
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8462
diff changeset
   190
  m_freshUlBsr (false)
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   191
  
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   192
{
7920
dd522ac64b64 added more logging to LteUeMac
Nicola Baldo <nbaldo@cttc.es>
parents: 7887
diff changeset
   193
  NS_LOG_FUNCTION (this);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   194
  m_macSapProvider = new UeMemberLteMacSapProvider (this);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   195
  m_cmacSapProvider = new UeMemberLteUeCmacSapProvider (this);
7887
78911c978517 renamed several LTE files and classes
CTTC
parents: 7886
diff changeset
   196
  m_uePhySapUser = new UeMemberLteUePhySapUser (this);
7886
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
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   200
LteUeMac::~LteUeMac ()
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   201
{
7920
dd522ac64b64 added more logging to LteUeMac
Nicola Baldo <nbaldo@cttc.es>
parents: 7887
diff changeset
   202
  NS_LOG_FUNCTION (this);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   203
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   204
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   205
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   206
LteUeMac::DoDispose ()
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   207
{
7920
dd522ac64b64 added more logging to LteUeMac
Nicola Baldo <nbaldo@cttc.es>
parents: 7887
diff changeset
   208
  NS_LOG_FUNCTION (this);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   209
  delete m_macSapProvider;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   210
  delete m_cmacSapProvider;
7930
ccb40542ae88 fixed memory leak in PHY SAP usage
Nicola Baldo <nbaldo@cttc.es>
parents: 7920
diff changeset
   211
  delete m_uePhySapUser;
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   212
  Object::DoDispose ();
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   213
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   214
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   215
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   216
LteUePhySapUser*
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   217
LteUeMac::GetLteUePhySapUser (void)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   218
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   219
  return m_uePhySapUser;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   220
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   221
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   222
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   223
LteUeMac::SetLteUePhySapProvider (LteUePhySapProvider* s)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   224
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   225
  m_uePhySapProvider = s;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   226
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   227
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   228
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   229
LteMacSapProvider*
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   230
LteUeMac::GetLteMacSapProvider (void)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   231
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   232
  return m_macSapProvider;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   233
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   234
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   235
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   236
LteUeMac::SetLteUeCmacSapUser (LteUeCmacSapUser* s)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   237
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   238
  m_cmacSapUser = s;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   239
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   240
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   241
LteUeCmacSapProvider*
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   242
LteUeMac::GetLteUeCmacSapProvider (void)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   243
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   244
  return m_cmacSapProvider;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   245
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   246
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   247
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   248
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   249
LteUeMac::DoTransmitPdu (LteMacSapProvider::TransmitPduParameters params)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   250
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   251
  NS_LOG_FUNCTION (this);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   252
  NS_ASSERT_MSG (m_rnti == params.rnti, "RNTI mismatch between RLC and MAC");
8714
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   253
  LteRadioBearerTag tag (params.rnti, params.lcid, 0 /* UE works in SISO mode*/);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   254
  params.pdu->AddPacketTag (tag);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   255
//   Ptr<PacketBurst> pb = CreateObject<PacketBurst> ();
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   256
//   pb->AddPacket (params.pdu);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   257
  m_uePhySapProvider->SendMacPdu (params.pdu);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   258
  // Uplink not implemented yet, so we wait can wait for the PHY SAP
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   259
  // to be defined before we implement the transmission method.
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   260
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   261
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   262
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   263
LteUeMac::DoReportBufferStatus (LteMacSapProvider::ReportBufferStatusParameters params)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   264
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   265
  NS_LOG_FUNCTION (this);
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   266
  
8671
8d0f6849e90c Avoid negative queue statistics in updating BSR reports in LteUeMac::DoReceiveIdealControlMessage and remove long uint
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   267
  std::map <uint8_t, uint64_t>::iterator it;
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   268
  
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   269
  
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   270
  it = m_ulBsrReceived.find (params.lcid);
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   271
  if (it!=m_ulBsrReceived.end ())
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   272
    {
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   273
      // update entry
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   274
      (*it).second = params.txQueueSize + params.retxQueueSize + params.statusPduSize;
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   275
    }
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   276
  else
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   277
    {
8671
8d0f6849e90c Avoid negative queue statistics in updating BSR reports in LteUeMac::DoReceiveIdealControlMessage and remove long uint
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   278
      m_ulBsrReceived.insert (std::pair<uint8_t, uint64_t> (params.lcid, params.txQueueSize + params.retxQueueSize + params.statusPduSize));
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   279
    }
8496
8d1759a15c2e Update LteUeMac for sending BSR only when new BSR are received from RLC
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8462
diff changeset
   280
  m_freshUlBsr = true;
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   281
}
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   282
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   283
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   284
void
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   285
LteUeMac::SendReportBufferStatus (void)
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   286
{
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   287
  NS_LOG_FUNCTION (this);
8496
8d1759a15c2e Update LteUeMac for sending BSR only when new BSR are received from RLC
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8462
diff changeset
   288
  if (m_ulBsrReceived.size () == 0)
8d1759a15c2e Update LteUeMac for sending BSR only when new BSR are received from RLC
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8462
diff changeset
   289
    {
8d1759a15c2e Update LteUeMac for sending BSR only when new BSR are received from RLC
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8462
diff changeset
   290
      return;  // No BSR report to transmit
8d1759a15c2e Update LteUeMac for sending BSR only when new BSR are received from RLC
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8462
diff changeset
   291
    }
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   292
  MacCeListElement_s bsr;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   293
  bsr.m_rnti = m_rnti;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   294
  bsr.m_macCeType = MacCeListElement_s::BSR;
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   295
  // BSR
8671
8d0f6849e90c Avoid negative queue statistics in updating BSR reports in LteUeMac::DoReceiveIdealControlMessage and remove long uint
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   296
  std::map <uint8_t, uint64_t>::iterator it;
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   297
  NS_ASSERT_MSG (m_ulBsrReceived.size () <=4, " Too many LCs (max is 4)");
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   298
  
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   299
  for (it = m_ulBsrReceived.begin (); it != m_ulBsrReceived.end (); it++)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   300
    {
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   301
      int queue = (*it).second;
8435
6b0542a91970 Transmission queue head-of-line delay and queue size at MAC Scheduler
mmiozzo
parents: 8416
diff changeset
   302
      int index = BufferSizeLevelBsr::BufferSize2BsrId (queue);
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   303
      bsr.m_macCeValue.m_bufferStatus.push_back (index);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   304
    }
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   305
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   306
  // create the feedback to eNB
9035
e40974228d94 Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8763
diff changeset
   307
  Ptr<BsrLteControlMessage> msg = Create<BsrLteControlMessage> ();
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   308
  msg->SetBsr (bsr);
9035
e40974228d94 Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8763
diff changeset
   309
  m_uePhySapProvider->SendLteControlMessage (msg);
7886
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
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   313
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   314
LteUeMac::DoConfigureUe (uint16_t rnti)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   315
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   316
  NS_LOG_FUNCTION (this << " rnti" << rnti);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   317
  m_rnti = rnti;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   318
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   319
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   320
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   321
LteUeMac::DoAddLc (uint8_t lcId, LteMacSapUser* msu)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   322
{
8666
cd02fdf79147 Clean traces
Manuel Requena <manuel.requena@cttc.es>
parents: 8496
diff changeset
   323
  NS_LOG_FUNCTION (this << " lcId" << (uint16_t) lcId);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   324
  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
   325
  m_macSapUserMap[lcId] = msu;
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   326
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   327
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   328
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   329
LteUeMac::DoRemoveLc (uint8_t lcId)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   330
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   331
  NS_LOG_FUNCTION (this << " lcId" << lcId);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   332
  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
   333
  m_macSapUserMap.erase (lcId);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   334
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   335
8714
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   336
void
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   337
LteUeMac::DoRrcUpdateConfigurationReq (LteUeConfig_t params)
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   338
{
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   339
  NS_LOG_FUNCTION (this << " txMode " << (uint8_t) params.m_transmissionMode);
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   340
  // forward info to PHY layer
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   341
  m_uePhySapProvider->SetTransmissionMode (params.m_transmissionMode);
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   342
}
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   343
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   344
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   345
void
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   346
LteUeMac::DoReceivePhyPdu (Ptr<Packet> p)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   347
{
8462
cf6a48994db5 renamed LteMacTag --> LteRadioBearerTag
Nicola Baldo <nbaldo@cttc.es>
parents: 8436
diff changeset
   348
  LteRadioBearerTag tag;
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   349
  p->RemovePacketTag (tag);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   350
  if (tag.GetRnti () == m_rnti)
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   351
    {
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   352
      // packet is for the current user
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   353
      std::map <uint8_t, LteMacSapUser*>::const_iterator it = m_macSapUserMap.find (tag.GetLcid ());
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   354
      NS_ASSERT_MSG (it != m_macSapUserMap.end (), "received packet with unknown lcid");
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   355
      it->second->ReceivePdu (p);
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   356
    }
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   357
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   358
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   359
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   360
void
9035
e40974228d94 Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8763
diff changeset
   361
LteUeMac::DoReceiveLteControlMessage (Ptr<LteControlMessage> msg)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   362
{
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   363
  NS_LOG_FUNCTION (this);
9035
e40974228d94 Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8763
diff changeset
   364
  if (msg->GetMessageType () == LteControlMessage::UL_DCI)
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   365
    {
9035
e40974228d94 Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8763
diff changeset
   366
      Ptr<UlDciLteControlMessage> msg2 = DynamicCast<UlDciLteControlMessage> (msg);
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   367
      UlDciListElement_s dci = msg2->GetDci ();
8671
8d0f6849e90c Avoid negative queue statistics in updating BSR reports in LteUeMac::DoReceiveIdealControlMessage and remove long uint
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   368
      std::map <uint8_t, uint64_t>::iterator itBsr;
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   369
      NS_ASSERT_MSG (m_ulBsrReceived.size () <=4, " Too many LCs (max is 4)");
8671
8d0f6849e90c Avoid negative queue statistics in updating BSR reports in LteUeMac::DoReceiveIdealControlMessage and remove long uint
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8496
diff changeset
   370
      uint16_t activeLcs = 0;
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   371
      for (itBsr = m_ulBsrReceived.begin (); itBsr != m_ulBsrReceived.end (); itBsr++)
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   372
        {
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   373
          if ((*itBsr).second > 0)
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   374
            {
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   375
              activeLcs++;
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   376
            }
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   377
        }
8763
bac46543614f variable cannot be negative
Tom Henderson <tomh@tomh.org>
parents: 8761
diff changeset
   378
      if (activeLcs == 0)
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   379
        {
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   380
          NS_LOG_ERROR (this << " No active flows for this UL-DCI");
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   381
          return;
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   382
        }
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   383
      std::map <uint8_t, LteMacSapUser*>::iterator it;
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   384
      NS_LOG_FUNCTION (this << " UE: UL-CQI notified TxOpportunity of " << dci.m_tbSize);
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   385
      for (it = m_macSapUserMap.begin (); it!=m_macSapUserMap.end (); it++)
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   386
        {
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   387
          itBsr = m_ulBsrReceived.find ((*it).first);
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   388
          if (itBsr!=m_ulBsrReceived.end ())
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   389
            {
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   390
              NS_LOG_FUNCTION (this << "\t" << dci.m_tbSize / m_macSapUserMap.size () << " bytes to LC " << (uint16_t)(*it).first << " queue " << (*itBsr).second);
8729
74de12409ee5 Update m_macChTtiDelay fixed to 4 in UL (standard) and make schedulers unaware of channel delays (tests updated according to new delay)
mmiozzo
parents: 8726
diff changeset
   391
              (*it).second->NotifyTxOpportunity (dci.m_tbSize / activeLcs, 0);
8761
8675a3948f7c type promotion causing signed/unsigned comparison warnings
Tom Henderson <tomh@tomh.org>
parents: 8729
diff changeset
   392
              if ((*itBsr).second >=  static_cast<uint64_t> (dci.m_tbSize / activeLcs))
8729
74de12409ee5 Update m_macChTtiDelay fixed to 4 in UL (standard) and make schedulers unaware of channel delays (tests updated according to new delay)
mmiozzo
parents: 8726
diff changeset
   393
                {
74de12409ee5 Update m_macChTtiDelay fixed to 4 in UL (standard) and make schedulers unaware of channel delays (tests updated according to new delay)
mmiozzo
parents: 8726
diff changeset
   394
                  (*itBsr).second -= dci.m_tbSize / activeLcs;
74de12409ee5 Update m_macChTtiDelay fixed to 4 in UL (standard) and make schedulers unaware of channel delays (tests updated according to new delay)
mmiozzo
parents: 8726
diff changeset
   395
                }
74de12409ee5 Update m_macChTtiDelay fixed to 4 in UL (standard) and make schedulers unaware of channel delays (tests updated according to new delay)
mmiozzo
parents: 8726
diff changeset
   396
              else
74de12409ee5 Update m_macChTtiDelay fixed to 4 in UL (standard) and make schedulers unaware of channel delays (tests updated according to new delay)
mmiozzo
parents: 8726
diff changeset
   397
                {
74de12409ee5 Update m_macChTtiDelay fixed to 4 in UL (standard) and make schedulers unaware of channel delays (tests updated according to new delay)
mmiozzo
parents: 8726
diff changeset
   398
                  (*itBsr).second = 0;
74de12409ee5 Update m_macChTtiDelay fixed to 4 in UL (standard) and make schedulers unaware of channel delays (tests updated according to new delay)
mmiozzo
parents: 8726
diff changeset
   399
                }
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   400
            }
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   401
        }
8148
09e2d03022a2 run check-style on src/lte/model
Nicola Baldo <nbaldo@cttc.es>
parents: 7930
diff changeset
   402
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   403
    }
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   404
  else
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   405
    {
9035
e40974228d94 Update Phy Layer for managing different frames for different set of channels (data vs. ctrl and srs)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8763
diff changeset
   406
      NS_LOG_FUNCTION (this << " LteControlMessage not recognized");
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   407
    }
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   408
}
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   409
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   410
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   411
void
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   412
LteUeMac::DoSubframeIndication (uint32_t frameNo, uint32_t subframeNo)
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   413
{
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   414
  NS_LOG_FUNCTION (this);
8496
8d1759a15c2e Update LteUeMac for sending BSR only when new BSR are received from RLC
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8462
diff changeset
   415
  if ((Simulator::Now () >= m_bsrLast + m_bsrPeriodicity) && (m_freshUlBsr==true))
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   416
    {
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   417
      SendReportBufferStatus ();
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   418
      m_bsrLast = Simulator::Now ();
8496
8d1759a15c2e Update LteUeMac for sending BSR only when new BSR are received from RLC
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8462
diff changeset
   419
      m_freshUlBsr = false;
8415
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   420
    }
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   421
}
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   422
e9a27a8c6331 Uplink scheduler with multiple bearers (LCs) allocates in a Round Robin fashion the active ones
mmiozzo
parents: 8148
diff changeset
   423
7886
b65c16d4da83 LENA project first public release
CTTC
parents:
diff changeset
   424
} // namespace ns3