src/wimax/model/bs-uplink-scheduler-mbqos.cc
author Josh Pelkey <jpelkey@gatech.edu>
Fri, 13 May 2011 15:02:36 -0400
changeset 7195 316d93dd9375
parent 7107 6c0fabb46bce
child 7252 c8200621e252
permissions -rw-r--r--
wimax coding style changes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
     2
/*
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
     3
 * This program is free software; you can redistribute it and/or modify
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
     4
 * it under the terms of the GNU General Public License version 2 as
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
     5
 * published by the Free Software Foundation;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
     6
 *
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
     7
 * This program is distributed in the hope that it will be useful,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
     8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
     9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    10
 * GNU General Public License for more details.
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    11
 *
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    12
 * You should have received a copy of the GNU General Public License
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    13
 * along with this program; if not, write to the Free Software
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    14
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    15
 *
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    16
 */
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    17
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    18
#include "bs-uplink-scheduler-mbqos.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    19
#include "bs-net-device.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    20
#include "ns3/simulator.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    21
#include "cid.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    22
#include "burst-profile-manager.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    23
#include "ss-manager.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    24
#include "ns3/log.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    25
#include "ns3/uinteger.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    26
#include "service-flow.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    27
#include "service-flow-record.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    28
#include "bs-link-manager.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    29
#include "bandwidth-manager.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    30
#include "connection-manager.h"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    31
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    32
NS_LOG_COMPONENT_DEFINE ("UplinkSchedulerMBQoS");
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    33
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    34
namespace ns3 {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    35
6393
f7e1f9dfa08d ensure objects are regsitered
Josh Pelkey <jpelkey@gatech.edu>
parents: 6273
diff changeset
    36
NS_OBJECT_ENSURE_REGISTERED (UplinkSchedulerMBQoS);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    37
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    38
UplinkSchedulerMBQoS::UplinkSchedulerMBQoS ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    39
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    40
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    41
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    42
UplinkSchedulerMBQoS::UplinkSchedulerMBQoS (Time time)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    43
  : m_windowInterval (time)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    44
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    45
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    46
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    47
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    48
UplinkSchedulerMBQoS::~UplinkSchedulerMBQoS (void)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    49
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    50
  SetBs (0);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    51
  m_uplinkAllocations.clear ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    52
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    53
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    54
TypeId
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    55
UplinkSchedulerMBQoS::GetTypeId (void)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    56
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    57
  static TypeId tid = TypeId ("ns3::UplinkSchedulerMBQoS")
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    58
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    59
    .SetParent<UplinkScheduler> ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    60
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    61
    .AddAttribute ("WindowInterval",
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    62
                   "The time to wait to reset window",
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    63
                   TimeValue (Seconds (1.0)),
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    64
                   MakeTimeAccessor (&UplinkSchedulerMBQoS::m_windowInterval),
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    65
                   MakeTimeChecker ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    66
  return tid;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    67
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    68
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    69
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    70
UplinkSchedulerMBQoS::InitOnce ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    71
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    72
  UplinkSchedWindowTimer ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    73
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    74
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    75
std::list<OfdmUlMapIe>
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    76
UplinkSchedulerMBQoS::GetUplinkAllocations (void) const
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    77
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    78
  return m_uplinkAllocations;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    79
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    80
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    81
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    82
UplinkSchedulerMBQoS::GetChannelDescriptorsToUpdate (bool &updateDcd,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    83
                                                     bool &updateUcd,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    84
                                                     bool &sendDcd,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    85
                                                     bool &sendUcd)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    86
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    87
  /* DCD and UCD shall actually be updated when channel or burst profile definitions
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    88
   change. burst profiles are updated based on number of SSs, network conditions and etc.
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    89
   for now temporarily assuming DCD/UCD shall be updated everytime */
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    90
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    91
  uint32_t randNr = rand ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    92
  if (randNr % 5 == 0 || GetBs ()->GetNrDcdSent () == 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    93
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    94
      sendDcd = true;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    95
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    96
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    97
  randNr = rand ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    98
  if (randNr % 5 == 0 || GetBs ()->GetNrUcdSent () == 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
    99
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   100
      sendUcd = true;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   101
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   102
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   103
  // -------------------------------------
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   104
  // additional, just to send more frequently
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   105
  if (!sendDcd)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   106
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   107
      randNr = rand ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   108
      if (randNr % 4 == 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   109
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   110
          sendDcd = true;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   111
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   112
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   113
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   114
  if (!sendUcd)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   115
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   116
      randNr = rand ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   117
      if (randNr % 4 == 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   118
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   119
          sendUcd = true;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   120
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   121
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   122
  // -------------------------------------
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   123
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   124
  Time timeSinceLastDcd = Simulator::Now () - GetDcdTimeStamp ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   125
  Time timeSinceLastUcd = Simulator::Now () - GetUcdTimeStamp ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   126
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   127
  if (timeSinceLastDcd > GetBs ()->GetDcdInterval ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   128
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   129
      sendDcd = true;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   130
      SetDcdTimeStamp (Simulator::Now ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   131
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   132
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   133
  if (timeSinceLastUcd > GetBs ()->GetUcdInterval ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   134
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   135
      sendUcd = true;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   136
      SetUcdTimeStamp (Simulator::Now ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   137
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   138
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   139
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   140
uint32_t
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   141
UplinkSchedulerMBQoS::CalculateAllocationStartTime (void)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   142
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   143
  return GetBs ()->GetNrDlSymbols () * GetBs ()->GetPhy ()->GetPsPerSymbol () + GetBs ()->GetTtg ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   144
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   145
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   146
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   147
UplinkSchedulerMBQoS::AddUplinkAllocation (OfdmUlMapIe &ulMapIe,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   148
                                           const uint32_t &allocationSize,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   149
                                           uint32_t &symbolsToAllocation,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   150
                                           uint32_t &availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   151
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   152
  ulMapIe.SetDuration (allocationSize);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   153
  ulMapIe.SetStartTime (symbolsToAllocation);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   154
  m_uplinkAllocations.push_back (ulMapIe);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   155
  symbolsToAllocation += allocationSize;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   156
  availableSymbols -= allocationSize;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   157
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   158
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   159
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   160
UplinkSchedulerMBQoS::UplinkSchedWindowTimer (void)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   161
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   162
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   163
  NS_LOG (LOG_DEBUG, "Window Reset at " << (Simulator::Now ()).GetSeconds ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   164
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   165
  uint32_t min_bw = 0;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   166
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   167
  if (!GetBs ()->GetSSManager ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   168
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   169
      Simulator::Schedule (m_windowInterval, &UplinkSchedulerMBQoS::UplinkSchedWindowTimer, this);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   170
      return;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   171
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   172
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   173
  std::vector<SSRecord*> *ssRecords = GetBs ()->GetSSManager ()->GetSSRecords ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   174
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   175
  // For each SS
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   176
  for (std::vector<SSRecord*>::iterator iter = ssRecords->begin (); iter != ssRecords->end (); ++iter)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   177
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   178
      SSRecord *ssRecord = *iter;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   179
      std::vector<ServiceFlow*> serviceFlows = ssRecord->GetServiceFlows (ServiceFlow::SF_TYPE_ALL);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   180
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   181
      // For each flow
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   182
      for (std::vector<ServiceFlow*>::iterator iter2 = serviceFlows.begin (); iter2 != serviceFlows.end (); ++iter2)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   183
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   184
          ServiceFlow *serviceFlow = *iter2;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   185
          if ((serviceFlow->GetSchedulingType () == ServiceFlow::SF_TYPE_RTPS) || (serviceFlow->GetSchedulingType ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   186
                                                                                   == ServiceFlow::SF_TYPE_NRTPS))
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   187
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   188
              min_bw = (int) ceil (serviceFlow->GetMinReservedTrafficRate ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   189
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   190
              // This way we can compensate flows which did not get min_bw in the previous window
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   191
              if ((serviceFlow->GetRecord ()->GetBacklogged () > 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   192
                  && (serviceFlow->GetRecord ()->GetBwSinceLastExpiry () < min_bw))
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   193
                {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   194
                  serviceFlow->GetRecord ()->UpdateBwSinceLastExpiry (-min_bw);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   195
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   196
                  // if backlogged < granted_bw then we don't need to provide granted_bw + min_bw in next window, but backlogged + min_bw
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   197
                  if (serviceFlow->GetRecord ()->GetBacklogged ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   198
                      < ((uint32_t) abs (serviceFlow->GetRecord ()->GetBwSinceLastExpiry ())))
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   199
                    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   200
                      serviceFlow->GetRecord ()->SetBwSinceLastExpiry (-serviceFlow->GetRecord ()->GetBacklogged ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   201
                    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   202
                }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   203
              else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   204
                {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   205
                  serviceFlow->GetRecord ()->SetBwSinceLastExpiry (0);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   206
                }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   207
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   208
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   209
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   210
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   211
  // Periodically reset window
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   212
  Simulator::Schedule (m_windowInterval, &UplinkSchedulerMBQoS::UplinkSchedWindowTimer, this);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   213
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   214
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   215
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   216
UplinkSchedulerMBQoS::Schedule (void)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   217
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   218
  m_uplinkAllocations.clear ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   219
  SetIsIrIntrvlAllocated (false);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   220
  SetIsInvIrIntrvlAllocated (false);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   221
  bool allocationForDsa = false;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   222
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   223
  uint32_t symbolsToAllocation = 0;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   224
  uint32_t allocationSize = 0; // size in symbols
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   225
  uint32_t availableSymbols = GetBs ()->GetNrUlSymbols ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   226
  uint32_t availableSymbolsAux = GetBs ()->GetNrUlSymbols ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   227
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   228
  AllocateInitialRangingInterval (symbolsToAllocation, availableSymbols);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   229
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   230
  std::vector<SSRecord*> *ssRecords = GetBs ()->GetSSManager ()->GetSSRecords ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   231
  for (std::vector<SSRecord*>::iterator iter = ssRecords->begin (); iter != ssRecords->end (); ++iter)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   232
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   233
      SSRecord *ssRecord = *iter;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   234
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   235
      if (ssRecord->GetIsBroadcastSS ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   236
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   237
          continue;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   238
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   239
      Cid cid = ssRecord->GetBasicCid ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   240
      OfdmUlMapIe ulMapIe;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   241
      ulMapIe.SetCid (cid);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   242
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   243
      if (ssRecord->GetPollForRanging () && ssRecord->GetRangingStatus () == WimaxNetDevice::RANGING_STATUS_CONTINUE)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   244
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   245
          // SS's ranging is not yet complete
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   246
          // allocating invited initial ranging interval
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   247
          ulMapIe.SetUiuc (OfdmUlBurstProfile::UIUC_INITIAL_RANGING);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   248
          allocationSize = GetBs ()->GetRangReqOppSize ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   249
          SetIsInvIrIntrvlAllocated (true);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   250
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   251
          if (availableSymbols >= allocationSize)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   252
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   253
              AddUplinkAllocation (ulMapIe, allocationSize, symbolsToAllocation, availableSymbols);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   254
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   255
          else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   256
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   257
              break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   258
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   259
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   260
      else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   261
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   262
          WimaxPhy::ModulationType modulationType = ssRecord->GetModulationType ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   263
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   264
          // need to update because modulation/FEC to UIUC mapping may vary over time
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   265
          ulMapIe.SetUiuc (GetBs ()->GetBurstProfileManager ()->GetBurstProfile (modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   266
                                                                                 WimaxNetDevice::DIRECTION_UPLINK));
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   267
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   268
          // establish service flows for SS
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   269
          if (ssRecord->GetRangingStatus () == WimaxNetDevice::RANGING_STATUS_SUCCESS
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   270
              && !ssRecord->GetAreServiceFlowsAllocated ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   271
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   272
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   273
              // allocating grant (with arbitrary size) to allow SS to send DSA messages DSA-REQ and DSA-ACK
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   274
              // only one DSA allocation per frame
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   275
              if (!allocationForDsa)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   276
                {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   277
                  allocationSize = GetBs ()->GetPhy ()->GetNrSymbols (sizeof(DsaReq), modulationType);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   278
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   279
                  if (availableSymbols >= allocationSize)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   280
                    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   281
                      AddUplinkAllocation (ulMapIe, allocationSize, symbolsToAllocation, availableSymbols);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   282
                      allocationForDsa = true;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   283
                    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   284
                  else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   285
                    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   286
                      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   287
                    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   288
                }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   289
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   290
          else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   291
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   292
              // all service flows associated to SS are established now
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   293
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   294
              /* Implementation of uplink scheduler
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   295
               * [1] Freitag, J.; da Fonseca, N.L.S., "Uplink Scheduling with Quality of Service in IEEE 802.16 Networks,"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   296
               * Global Telecommunications Conference, 2007. GLOBECOM '07. IEEE , vol., no., pp.2503-2508, 26-30 Nov. 2007
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   297
               * URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=4411386&isnumber=4410910 */
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   298
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   299
              // Step 1
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   300
              if (availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   301
                {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   302
                  /*allocating grants for data transmission for UGS flows (Data Grant Burst Type IEs, 6.3.7.4.3.3)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   303
                   (grant has been referred by different names e.g. transmission opportunity, slot,         uplink allocation, etc)*/
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   304
                  if (ssRecord->GetHasServiceFlowUgs ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   305
                    {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   306
                      NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds () << " offering be unicast polling");
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   307
                      // Recover period interval information for UGS flow
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   308
                      Time frame_duration = GetBs ()->GetPhy ()->GetFrameDuration ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   309
                      Time
7195
316d93dd9375 wimax coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 7107
diff changeset
   310
                      timestamp =
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   311
                        (*(ssRecord->GetServiceFlows (ServiceFlow::SF_TYPE_UGS).begin ()))->GetRecord ()->GetLastGrantTime ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   312
                        + MilliSeconds ((*(ssRecord->GetServiceFlows (ServiceFlow::SF_TYPE_UGS).begin ()))->GetUnsolicitedGrantInterval ());
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   313
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   314
                      Time frame = Time ((timestamp - Simulator::Now ()) / frame_duration);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   315
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6393
diff changeset
   316
                      if (frame <= 1)
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   317
                        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   318
                          // UGS Grants
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   319
                          // It is not necessary to enqueue UGS grants once it is periodically served
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   320
                          ServiceUnsolicitedGrants (ssRecord,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   321
                                                    ServiceFlow::SF_TYPE_UGS,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   322
                                                    ulMapIe,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   323
                                                    modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   324
                                                    symbolsToAllocation,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   325
                                                    availableSymbols);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   326
                        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   327
                    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   328
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   329
                  // enqueue allocate unicast polls for rtPS flows if bandwidth is available
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   330
                  if (ssRecord->GetHasServiceFlowRtps ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   331
                    {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   332
                      NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds () << " offering rtps unicast polling");
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   333
                      Ptr<UlJob> jobRTPSPoll = CreateUlJob (ssRecord, ServiceFlow::SF_TYPE_RTPS, UNICAST_POLLING);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   334
                      EnqueueJob (UlJob::HIGH, jobRTPSPoll);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   335
                    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   336
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   337
                  if (ssRecord->GetHasServiceFlowNrtps ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   338
                    {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   339
                      NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds () << " offering nrtps unicast polling");
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   340
                      // allocate unicast polls for nrtPS flows if bandwidth is available
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   341
                      Ptr<UlJob> jobNRTPSPoll = CreateUlJob (ssRecord, ServiceFlow::SF_TYPE_NRTPS, UNICAST_POLLING);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   342
                      EnqueueJob (UlJob::HIGH, jobNRTPSPoll);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   343
                    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   344
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   345
                  if (ssRecord->GetHasServiceFlowBe ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   346
                    {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   347
                      NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds () << " offering be unicast polling");
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   348
                      // finally allocate unicast polls for BE flows if bandwidth is available
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   349
                      Ptr<UlJob> jobBEPoll = CreateUlJob (ssRecord, ServiceFlow::SF_TYPE_BE, UNICAST_POLLING);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   350
                      EnqueueJob (UlJob::HIGH, jobBEPoll);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   351
                    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   352
                }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   353
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   354
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   355
    }
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   356
  NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds ()<< " high queue has " << m_uplinkJobs_high.size ()<< " jobs - after sched");
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   357
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   358
  availableSymbolsAux = availableSymbols;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   359
  uint32_t symbolsUsed = 0;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   360
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   361
  symbolsUsed += CountSymbolsQueue (m_uplinkJobs_high);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   362
  availableSymbolsAux -= symbolsUsed;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   363
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   364
  // Step 2 - Check Deadline - Migrate requests with deadline expiring
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   365
  CheckDeadline (availableSymbolsAux);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   366
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   367
  // Step 3 - Check Minimum Bandwidth
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   368
  CheckMinimumBandwidth (availableSymbolsAux);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   369
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   370
  // Scheduling high priority queue
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   371
  NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds ()<< " high queue has " << m_uplinkJobs_high.size ()<< " jobs");
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   372
  while ((availableSymbols) && (!m_uplinkJobs_high.empty ()))
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   373
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   374
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   375
      Ptr<UlJob> job = m_uplinkJobs_high.front ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   376
      OfdmUlMapIe ulMapIe;
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   377
      SSRecord * ssRecord = job->GetSsRecord ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   378
      enum ServiceFlow::SchedulingType schedulingType = job->GetSchedulingType ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   379
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   380
      Cid cid = ssRecord->GetBasicCid ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   381
      ulMapIe.SetCid (cid);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   382
      WimaxPhy::ModulationType modulationType = ssRecord->GetModulationType ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   383
      // need to update because modulation/FEC to UIUC mapping may vary over time
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   384
      ulMapIe.SetUiuc (GetBs ()->GetBurstProfileManager ()->GetBurstProfile (modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   385
                                                                             WimaxNetDevice::DIRECTION_UPLINK));
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   386
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   387
      ReqType reqType = job->GetType ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   388
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   389
      if (reqType == UNICAST_POLLING)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   390
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   391
          ServiceUnsolicitedGrants (ssRecord,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   392
                                    schedulingType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   393
                                    ulMapIe,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   394
                                    modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   395
                                    symbolsToAllocation,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   396
                                    availableSymbols);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   397
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   398
      else if (reqType == DATA)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   399
        {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   400
          ServiceFlow *serviceFlow = job->GetServiceFlow ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   401
          uint32_t allocSizeBytes = job->GetSize ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   402
          ServiceBandwidthRequestsBytes (serviceFlow,
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   403
                                         schedulingType,
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   404
                                         ulMapIe,
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   405
                                         modulationType,
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   406
                                         symbolsToAllocation,
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   407
                                         availableSymbols,
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   408
                                         allocSizeBytes);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   409
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   410
      m_uplinkJobs_high.pop_front ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   411
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   412
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   413
  NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds ()<< " interqueue has " << m_uplinkJobs_inter.size ()<< " jobs");
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   414
  /* Scheduling intermediate priority queue */
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   415
  while ((availableSymbols) && (!m_uplinkJobs_inter.empty ()))
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   416
    {
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   417
      NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds ()<< " Scheduling interqueue");
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   418
      Ptr<UlJob> job = m_uplinkJobs_inter.front ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   419
      OfdmUlMapIe ulMapIe;
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   420
      SSRecord * ssRecord = job->GetSsRecord ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   421
      enum ServiceFlow::SchedulingType schedulingType = job->GetSchedulingType ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   422
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   423
      Cid cid = ssRecord->GetBasicCid ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   424
      ulMapIe.SetCid (cid);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   425
      WimaxPhy::ModulationType modulationType = ssRecord->GetModulationType ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   426
      // need to update because modulation/FEC to UIUC mapping may vary over time
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   427
      ulMapIe.SetUiuc (GetBs ()->GetBurstProfileManager ()->GetBurstProfile (modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   428
                                                                             WimaxNetDevice::DIRECTION_UPLINK));
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   429
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   430
      ReqType reqType = job->GetType ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   431
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   432
      if (reqType == DATA)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   433
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   434
          ServiceBandwidthRequests (ssRecord,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   435
                                    schedulingType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   436
                                    ulMapIe,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   437
                                    modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   438
                                    symbolsToAllocation,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   439
                                    availableSymbols);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   440
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   441
      else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   442
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   443
          NS_FATAL_ERROR ("Intermediate priority queue only should enqueue data packets.");
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   444
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   445
      m_uplinkJobs_inter.pop_front ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   446
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   447
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   448
  /* Scheduling low priority queue */
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   449
  while ((availableSymbols) && (!m_uplinkJobs_low.empty ()))
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   450
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   451
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   452
      Ptr<UlJob> job = m_uplinkJobs_low.front ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   453
      OfdmUlMapIe ulMapIe;
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   454
      SSRecord * ssRecord = job->GetSsRecord ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   455
      enum ServiceFlow::SchedulingType schedulingType = job->GetSchedulingType ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   456
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   457
      Cid cid = ssRecord->GetBasicCid ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   458
      ulMapIe.SetCid (cid);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   459
      WimaxPhy::ModulationType modulationType = ssRecord->GetModulationType ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   460
      // need to update because modulation/FEC to UIUC mapping may vary over time
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   461
      ulMapIe.SetUiuc (GetBs ()->GetBurstProfileManager ()->GetBurstProfile (modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   462
                                                                             WimaxNetDevice::DIRECTION_UPLINK));
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   463
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   464
      ReqType reqType = job->GetType ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   465
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   466
      if (reqType == DATA)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   467
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   468
          ServiceBandwidthRequests (ssRecord,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   469
                                    schedulingType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   470
                                    ulMapIe,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   471
                                    modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   472
                                    symbolsToAllocation,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   473
                                    availableSymbols);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   474
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   475
      else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   476
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   477
          NS_FATAL_ERROR ("Low priority queue only should enqueue data packets.");
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   478
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   479
      m_uplinkJobs_low.pop_front ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   480
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   481
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   482
  OfdmUlMapIe ulMapIeEnd;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   483
  ulMapIeEnd.SetCid (*(new Cid (0)));
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   484
  ulMapIeEnd.SetStartTime (symbolsToAllocation);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   485
  ulMapIeEnd.SetUiuc (OfdmUlBurstProfile::UIUC_END_OF_MAP);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   486
  ulMapIeEnd.SetDuration (0);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   487
  m_uplinkAllocations.push_back (ulMapIeEnd);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   488
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   489
  // setting DL/UL subframe allocation for the next frame
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   490
  GetBs ()->GetBandwidthManager ()->SetSubframeRatio ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   491
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   492
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   493
bool UplinkSchedulerMBQoS::ServiceBandwidthRequestsBytes (ServiceFlow *serviceFlow,
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   494
                                                          enum ServiceFlow::SchedulingType schedulingType, OfdmUlMapIe &ulMapIe,
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   495
                                                          const WimaxPhy::ModulationType modulationType,
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   496
                                                          uint32_t &symbolsToAllocation, uint32_t &availableSymbols, uint32_t allocationSizeBytes)
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   497
{
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   498
  uint32_t allocSizeBytes = allocationSizeBytes;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   499
  uint32_t allocSizeSymbols = 0;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   500
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   501
  ServiceFlowRecord *record = serviceFlow->GetRecord ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   502
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   503
  uint32_t requiredBandwidth = record->GetRequestedBandwidth ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   504
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   505
  if (requiredBandwidth > 0)
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   506
    {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   507
      allocSizeSymbols = GetBs ()->GetPhy ()->GetNrSymbols (allocSizeBytes, modulationType);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   508
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   509
      if (availableSymbols < allocSizeSymbols)
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   510
        {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   511
          allocSizeSymbols = availableSymbols;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   512
        }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   513
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   514
      if (availableSymbols >= allocSizeSymbols)
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   515
        {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   516
          NS_LOG_DEBUG (
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   517
            "At " << Simulator::Now ().GetSeconds ()<<" BS uplink scheduler, "
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   518
                  << serviceFlow->GetSchedulingTypeStr ()
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   519
                  << " allocation, size: " << allocSizeSymbols << " symbols"
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   520
                  << ", CID: "
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   521
                  << serviceFlow->GetConnection ()->GetCid ()
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   522
                  << ", SFID: " << serviceFlow->GetSfid ()
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   523
                  << ", bw requested: " << record->GetRequestedBandwidth ()
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   524
                  << ", bw granted: " << allocSizeBytes
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   525
                  << std::endl);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   526
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   527
          record->UpdateGrantedBandwidthTemp (allocSizeBytes);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   528
          record->UpdateGrantedBandwidth (allocSizeBytes);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   529
          record->UpdateRequestedBandwidth (-allocSizeBytes);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   530
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   531
          record->UpdateBwSinceLastExpiry (allocSizeBytes);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   532
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   533
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   534
          AddUplinkAllocation (ulMapIe, allocSizeSymbols, symbolsToAllocation,
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   535
                               availableSymbols);
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   536
        } else
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   537
        {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   538
          return false;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   539
        }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   540
    }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   541
  return true;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   542
}
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   543
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   544
uint32_t
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   545
UplinkSchedulerMBQoS::CountSymbolsQueue (std::list<Ptr<UlJob> > jobs)
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   546
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   547
  uint32_t symbols = 0;
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   548
  for (std::list<Ptr<UlJob> >::iterator iter = jobs.begin (); iter != jobs.end (); ++iter)
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   549
    {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   550
      Ptr<UlJob> job = *iter;
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   551
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   552
      // count symbols
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   553
      symbols += CountSymbolsJobs (job);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   554
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   555
  return symbols;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   556
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   557
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   558
Ptr<UlJob>
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   559
UplinkSchedulerMBQoS::CreateUlJob (SSRecord *ssRecord, enum ServiceFlow::SchedulingType schedType, ReqType reqType)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   560
{
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   561
  Ptr<UlJob> job = CreateObject <UlJob> ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   562
  job->SetSsRecord (ssRecord);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   563
  job->SetSchedulingType (schedType);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   564
  job->SetServiceFlow (*(ssRecord->GetServiceFlows (schedType).begin ()));
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   565
  job->SetType (reqType);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   566
  return job;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   567
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   568
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   569
uint32_t
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   570
UplinkSchedulerMBQoS::CountSymbolsJobs (Ptr<UlJob> job)
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   571
{
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   572
  SSRecord *ssRecord = job->GetSsRecord ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   573
  ServiceFlow *serviceFlow = job->GetServiceFlow ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   574
  uint32_t allocationSize = 0;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   575
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   576
  if (job->GetType () == UNICAST_POLLING)
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   577
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   578
      // if polling
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   579
      Time currentTime = Simulator::Now ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   580
      allocationSize = 0;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   581
      if ((currentTime - serviceFlow->GetRecord ()->GetGrantTimeStamp ()).GetMilliSeconds ()
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   582
          >= serviceFlow->GetUnsolicitedPollingInterval ())
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   583
        {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   584
          allocationSize = GetBs ()->GetBwReqOppSize ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   585
        }
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   586
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   587
  else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   588
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   589
      // if data
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   590
      uint16_t sduSize = serviceFlow->GetSduSize ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   591
      ServiceFlowRecord *record = serviceFlow->GetRecord ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   592
      uint32_t requiredBandwidth = record->GetRequestedBandwidth () - record->GetGrantedBandwidth ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   593
      if (requiredBandwidth > 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   594
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   595
          WimaxPhy::ModulationType modulationType = ssRecord->GetModulationType ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   596
          if (sduSize > 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   597
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   598
              // if SDU size is mentioned, allocate grant of that size
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   599
              allocationSize = GetBs ()->GetPhy ()->GetNrSymbols (sduSize, modulationType);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   600
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   601
          else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   602
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   603
              allocationSize = GetBs ()->GetPhy ()->GetNrSymbols (requiredBandwidth, modulationType);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   604
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   605
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   606
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   607
  return allocationSize;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   608
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   609
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   610
void
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   611
UplinkSchedulerMBQoS::EnqueueJob (UlJob::JobPriority priority, Ptr<UlJob> job)
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   612
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   613
  switch (priority)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   614
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   615
    case UlJob::HIGH:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   616
      m_uplinkJobs_high.push_back (job);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   617
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   618
    case UlJob::INTERMEDIATE:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   619
      m_uplinkJobs_inter.push_back (job);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   620
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   621
    case UlJob::LOW:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   622
      m_uplinkJobs_low.push_back (job);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   623
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   624
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   625
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   626
Ptr<UlJob>
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   627
UplinkSchedulerMBQoS::DequeueJob (UlJob::JobPriority priority)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   628
{
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   629
  Ptr<UlJob> job_front;
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   630
  switch (priority)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   631
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   632
    case UlJob::HIGH:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   633
      job_front = m_uplinkJobs_high.front ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   634
      m_uplinkJobs_high.pop_front ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   635
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   636
    case UlJob::INTERMEDIATE:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   637
      job_front = m_uplinkJobs_inter.front ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   638
      m_uplinkJobs_inter.pop_front ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   639
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   640
    case UlJob::LOW:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   641
      job_front = m_uplinkJobs_low.front ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   642
      m_uplinkJobs_low.pop_front ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   643
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   644
  return job_front;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   645
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   646
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   647
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   648
UplinkSchedulerMBQoS::CheckDeadline (uint32_t &availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   649
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   650
  // for each request in the imermediate queue
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   651
  if (m_uplinkJobs_inter.size () > 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   652
    {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   653
      std::list<Ptr<UlJob> >::iterator iter = m_uplinkJobs_inter.begin ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   654
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   655
      while (iter != m_uplinkJobs_inter.end () && availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   656
        {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   657
          Ptr<UlJob> job = *iter;
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   658
6273
8d70de29d514 spell check, mostly in comments.
Andrey Mazo <mazo@iitp.ru>
parents: 6156
diff changeset
   659
          // guarantee delay bound for rtps connections
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   660
          if (job->GetSchedulingType () == ServiceFlow::SF_TYPE_RTPS)
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   661
            {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   662
              Time deadline = job->GetDeadline ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   663
              Time frame_duration = GetBs ()->GetPhy ()->GetFrameDuration ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   664
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   665
              Time frame = Time ((deadline - Simulator::Now ()) / frame_duration);
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   666
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   667
              NS_LOG_DEBUG ("At " << Simulator::Now ().GetSeconds () << " reserved traffic rate: "
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   668
                                  << job->GetServiceFlow ()->GetMinReservedTrafficRate ()
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   669
                                  <<" deadline: "<<job->GetDeadline ().GetSeconds () << " frame start: "<<GetBs ()->m_frameStartTime.GetSeconds ()
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   670
                                  <<" frame duration: "<< frame_duration );
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   671
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   672
              // should be schedule in this frame to max latency
7036
f94c610203be a 64bit time class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6393
diff changeset
   673
              if (frame >= 3)
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   674
                {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   675
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   676
                  if (availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   677
                    {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   678
                      uint32_t availableBytes =  GetBs ()->GetPhy ()->GetNrBytes (availableSymbols,job->GetSsRecord ()->GetModulationType ());
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   679
                      uint32_t allocationSize = job->GetSize ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   680
                      if (allocationSize > availableBytes)
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   681
                        {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   682
                          allocationSize = availableBytes;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   683
                        }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   684
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   685
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   686
                      if (allocationSize == 0)
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   687
                        {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   688
                          continue;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   689
                        }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   690
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   691
                      uint32_t symbolsToAllocate = GetBs ()->GetPhy ()->GetNrSymbols(allocationSize, job->GetSsRecord ()->GetModulationType ());
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   692
                      if (symbolsToAllocate > availableSymbols)
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   693
                        {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   694
                          symbolsToAllocate = availableSymbols;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   695
                          allocationSize = GetBs ()->GetPhy ()->GetNrBytes (symbolsToAllocate,job->GetSsRecord ()->GetModulationType ());
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   696
                        }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   697
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   698
                      job->SetSize (job->GetSize () - allocationSize);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   699
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   700
                      Ptr<UlJob> newJob =  CreateObject<UlJob> ();
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   701
                      // Record data in job
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   702
                      newJob->SetSsRecord (job->GetSsRecord ());
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   703
                      newJob->SetServiceFlow (job->GetServiceFlow ());
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   704
                      newJob->SetSize (allocationSize);
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   705
                      newJob->SetDeadline (job->GetDeadline ());
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   706
                      newJob->SetReleaseTime (job->GetReleaseTime ());
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   707
                      newJob->SetSchedulingType (job->GetSchedulingType ());
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   708
                      newJob->SetPeriod (job->GetPeriod ());
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   709
                      newJob->SetType (job->GetType ());
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   710
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   711
                      EnqueueJob (UlJob::HIGH, newJob);
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   712
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   713
                      // migrate request
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   714
                      iter++;
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   715
                      if ((job->GetSize () - allocationSize) == 0)
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   716
                        {
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   717
                          m_uplinkJobs_inter.remove (job);
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
   718
                        }
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   719
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   720
                    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   721
                }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   722
              else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   723
                {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   724
                  iter++;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   725
                }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   726
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   727
          else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   728
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   729
              iter++;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   730
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   731
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   732
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   733
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   734
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   735
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   736
UplinkSchedulerMBQoS::CheckMinimumBandwidth (uint32_t &availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   737
{
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   738
  std::list<Ptr<PriorityUlJob> > priorityUlJobs;
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   739
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   740
  // For each connection of type rtPS or nrtPS
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   741
  std::vector<SSRecord*> *ssRecords = GetBs ()->GetSSManager ()->GetSSRecords ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   742
  for (std::vector<SSRecord*>::iterator iter = ssRecords->begin (); iter != ssRecords->end (); ++iter)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   743
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   744
      SSRecord *ssRecord = *iter;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   745
      std::vector<ServiceFlow*> serviceFlows = ssRecord->GetServiceFlows (ServiceFlow::SF_TYPE_ALL);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   746
      for (std::vector<ServiceFlow*>::iterator iter2 = serviceFlows.begin (); iter2 != serviceFlows.end (); ++iter2)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   747
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   748
          ServiceFlow *serviceFlow = *iter2;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   749
          if (serviceFlow->GetSchedulingType () == ServiceFlow::SF_TYPE_RTPS || serviceFlow->GetSchedulingType ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   750
              == ServiceFlow::SF_TYPE_NRTPS)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   751
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   752
              serviceFlow->GetRecord ()->SetBackloggedTemp (serviceFlow->GetRecord ()->GetBacklogged ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   753
              serviceFlow->GetRecord ()->SetGrantedBandwidthTemp (serviceFlow->GetRecord ()->GetBwSinceLastExpiry ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   754
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   755
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   756
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   757
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   758
  // for each request in the imermediate queue
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   759
  for (std::list<Ptr<UlJob> >::const_iterator iter = m_uplinkJobs_inter.begin (); iter != m_uplinkJobs_inter.end (); ++iter)
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   760
    {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   761
      Ptr<UlJob> job = *iter;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   762
      // SSRecord ssRecord = job->GetSsRecord();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   763
      ServiceFlow *serviceFlow = job->GetServiceFlow ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   764
      if ((job->GetSchedulingType () == ServiceFlow::SF_TYPE_RTPS || job->GetSchedulingType ()
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   765
           == ServiceFlow::SF_TYPE_NRTPS) && (serviceFlow->GetRecord ()->GetBacklogged () > 0))
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   766
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   767
          uint32_t minReservedTrafficRate = serviceFlow->GetMinReservedTrafficRate ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   768
          uint32_t grantedBandwidth = serviceFlow->GetRecord ()->GetBwSinceLastExpiry ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   769
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   770
          Ptr<PriorityUlJob> priorityUlJob = CreateObject<PriorityUlJob> ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   771
          priorityUlJob->SetUlJob (job);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   772
          // pri_array
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   773
          if (minReservedTrafficRate <= grantedBandwidth)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   774
            {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   775
              priorityUlJob->SetPriority (-10000);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   776
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   777
          else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   778
            {
6156
d911cbffa052 Fix build on MinGW.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 6148
diff changeset
   779
              uint32_t allocationSize = serviceFlow->GetRecord ()->GetRequestedBandwidth ()
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   780
                - serviceFlow->GetRecord ()->GetGrantedBandwidth ();
6156
d911cbffa052 Fix build on MinGW.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 6148
diff changeset
   781
              uint32_t sduSize = serviceFlow->GetSduSize ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   782
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   783
              if (allocationSize > 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   784
                {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   785
                  if (sduSize > 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   786
                    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   787
                      // if SDU size is mentioned, grant of that size
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   788
                      allocationSize = sduSize;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   789
                    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   790
                }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   791
              int priority = serviceFlow->GetRecord ()->GetBackloggedTemp ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   792
                - (serviceFlow->GetRecord ()->GetGrantedBandwidthTemp () - minReservedTrafficRate);
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   793
              priorityUlJob->SetPriority (priority);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   794
              serviceFlow->GetRecord ()->SetGrantedBandwidthTemp (serviceFlow->GetRecord ()->GetGrantedBandwidthTemp ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   795
                                                                  + allocationSize);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   796
              serviceFlow->GetRecord ()->SetBackloggedTemp (serviceFlow->GetRecord ()->GetBackloggedTemp ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   797
                                                            - allocationSize);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   798
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   799
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   800
          priorityUlJobs.push_back (priorityUlJob);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   801
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   802
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   803
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   804
  priorityUlJobs.sort (SortProcessPtr ());
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   805
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   806
  for (std::list<Ptr<PriorityUlJob> >::const_iterator iter = priorityUlJobs.begin (); iter != priorityUlJobs.end (); ++iter)
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   807
    {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   808
      Ptr<PriorityUlJob> priorityUlJob = *iter;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   809
      Ptr<UlJob> job_priority = priorityUlJob->GetUlJob ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   810
      Ptr<UlJob> job = job_priority;
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   811
      if (availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   812
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   813
          availableSymbols -= CountSymbolsJobs (job);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   814
          // migrate request
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   815
          m_uplinkJobs_inter.remove (job);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   816
          EnqueueJob (UlJob::HIGH, job);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   817
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   818
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   819
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   820
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   821
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   822
UplinkSchedulerMBQoS::ServiceUnsolicitedGrants (const SSRecord *ssRecord,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   823
                                                enum ServiceFlow::SchedulingType schedulingType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   824
                                                OfdmUlMapIe &ulMapIe,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   825
                                                const WimaxPhy::ModulationType modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   826
                                                uint32_t &symbolsToAllocation,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   827
                                                uint32_t &availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   828
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   829
  uint32_t allocationSize = 0; // size in symbols
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   830
  uint8_t uiuc = ulMapIe.GetUiuc (); // SS's burst profile
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   831
  std::vector<ServiceFlow*> serviceFlows = ssRecord->GetServiceFlows (schedulingType);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   832
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   833
  for (std::vector<ServiceFlow*>::iterator iter = serviceFlows.begin (); iter != serviceFlows.end (); ++iter)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   834
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   835
      ServiceFlow *serviceFlow = *iter;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   836
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   837
      /* in case of rtPS, nrtPS and BE, allocating unicast polls for bandwidth requests (Request IEs, 6.3.7.4.3.1).
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   838
       in case of UGS, allocating grants for data transmission (Data Grant Burst Type IEs, 6.3.7.4.3.3) (grant has
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   839
       been referred in this code by different names e.g. transmission opportunity, slot, allocation, etc) */
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   840
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   841
      allocationSize = GetBs ()->GetBandwidthManager ()->CalculateAllocationSize (ssRecord, serviceFlow);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   842
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   843
      if (availableSymbols < allocationSize)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   844
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   845
          break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   846
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   847
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   848
      if (allocationSize > 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   849
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   850
          ulMapIe.SetStartTime (symbolsToAllocation);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   851
          if (serviceFlow->GetSchedulingType () != ServiceFlow::SF_TYPE_UGS)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   852
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   853
              // special burst profile with most robust modulation type is used for unicast polls (Request IEs)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   854
              ulMapIe.SetUiuc (OfdmUlBurstProfile::UIUC_REQ_REGION_FULL);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   855
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   856
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   857
      else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   858
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   859
          continue;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   860
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   861
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   862
      if (serviceFlow->GetSchedulingType () == ServiceFlow::SF_TYPE_UGS)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   863
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   864
          NS_LOG_DEBUG ("BS uplink scheduler, UGS allocation, size: " << allocationSize << " symbols");
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   865
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   866
      else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   867
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   868
          NS_LOG_DEBUG ("BS uplink scheduler, " << serviceFlow->GetSchedulingTypeStr () << " unicast poll, size: "
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   869
                                                << allocationSize << " symbols" << ", modulation: BPSK 1/2");
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   870
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   871
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   872
      NS_LOG_DEBUG (", CID: " << serviceFlow->GetConnection ()->GetCid () << ", SFID: " << serviceFlow->GetSfid ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   873
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   874
      serviceFlow->GetRecord ()->SetLastGrantTime (Simulator::Now ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   875
      AddUplinkAllocation (ulMapIe, allocationSize, symbolsToAllocation, availableSymbols);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   876
      ulMapIe.SetUiuc (uiuc);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   877
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   878
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   879
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   880
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   881
UplinkSchedulerMBQoS::ServiceBandwidthRequests (const SSRecord *ssRecord,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   882
                                                enum ServiceFlow::SchedulingType schedulingType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   883
                                                OfdmUlMapIe &ulMapIe,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   884
                                                const WimaxPhy::ModulationType modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   885
                                                uint32_t &symbolsToAllocation,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   886
                                                uint32_t &availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   887
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   888
  std::vector<ServiceFlow*> serviceFlows = ssRecord->GetServiceFlows (schedulingType);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   889
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   890
  for (std::vector<ServiceFlow*>::iterator iter = serviceFlows.begin (); iter != serviceFlows.end (); ++iter)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   891
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   892
      if (!ServiceBandwidthRequests (*iter,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   893
                                     schedulingType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   894
                                     ulMapIe,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   895
                                     modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   896
                                     symbolsToAllocation,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   897
                                     availableSymbols))
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   898
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   899
          break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   900
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   901
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   902
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   903
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   904
bool
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   905
UplinkSchedulerMBQoS::ServiceBandwidthRequests (ServiceFlow *serviceFlow,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   906
                                                enum ServiceFlow::SchedulingType schedulingType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   907
                                                OfdmUlMapIe &ulMapIe,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   908
                                                const WimaxPhy::ModulationType modulationType,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   909
                                                uint32_t &symbolsToAllocation,
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   910
                                                uint32_t &availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   911
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   912
  uint32_t allocSizeBytes = 0;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   913
  uint32_t allocSizeSymbols = 0;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   914
  uint16_t sduSize = 0;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   915
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   916
  ServiceFlowRecord *record = serviceFlow->GetRecord ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   917
  sduSize = serviceFlow->GetSduSize ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   918
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   919
  uint32_t requiredBandwidth = record->GetRequestedBandwidth () - record->GetGrantedBandwidth ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   920
  if (requiredBandwidth > 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   921
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   922
      if (sduSize > 0)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   923
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   924
          // if SDU size is mentioned, allocate grant of that size
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   925
          allocSizeBytes = sduSize;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   926
          allocSizeSymbols = GetBs ()->GetPhy ()->GetNrSymbols (sduSize, modulationType);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   927
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   928
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   929
      else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   930
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   931
          allocSizeBytes = requiredBandwidth;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   932
          allocSizeSymbols = GetBs ()->GetPhy ()->GetNrSymbols (requiredBandwidth, modulationType);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   933
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   934
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   935
      if (availableSymbols >= allocSizeSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   936
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   937
          NS_LOG_DEBUG ("BS uplink scheduler, " << serviceFlow->GetSchedulingTypeStr () << " allocation, size: "
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   938
                                                << allocSizeSymbols << " symbols" << ", CID: " << serviceFlow->GetConnection ()->GetCid () << ", SFID: "
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   939
                                                << serviceFlow->GetSfid () << ", bw requested: " << record->GetRequestedBandwidth () << ", bw granted: "
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   940
                                                << record->GetGrantedBandwidth ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   941
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   942
          record->UpdateGrantedBandwidth (allocSizeBytes);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   943
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   944
          record->SetBwSinceLastExpiry (allocSizeBytes);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   945
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   946
          if (serviceFlow->GetRecord ()->GetBacklogged () < allocSizeBytes)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   947
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   948
              serviceFlow->GetRecord ()->SetBacklogged (0);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   949
            }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   950
          else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   951
            {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   952
              serviceFlow->GetRecord ()->IncreaseBacklogged (-allocSizeBytes);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   953
            }
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
   954
          serviceFlow->GetRecord ()->SetLastGrantTime (Simulator::Now ());
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   955
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   956
          AddUplinkAllocation (ulMapIe, allocSizeSymbols, symbolsToAllocation, availableSymbols);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   957
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   958
      else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   959
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   960
          return false;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   961
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   962
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   963
  return true;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   964
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   965
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   966
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   967
UplinkSchedulerMBQoS::AllocateInitialRangingInterval (uint32_t &symbolsToAllocation, uint32_t &availableSymbols)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   968
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   969
  Time ssUlStartTime = Seconds (CalculateAllocationStartTime () * GetBs ()->GetPsDuration ().GetSeconds ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   970
  SetNrIrOppsAllocated (GetBs ()->GetLinkManager ()->CalculateRangingOppsToAllocate ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   971
  uint32_t allocationSize = GetNrIrOppsAllocated () * GetBs ()->GetRangReqOppSize ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   972
  Time timeSinceLastIrInterval = Simulator::Now () - GetTimeStampIrInterval ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   973
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   974
  // adding one frame because may be the time has not elapsed now but will elapse before the next frame is sent
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   975
  if (timeSinceLastIrInterval + GetBs ()->GetPhy ()->GetFrameDuration () > GetBs ()->GetInitialRangingInterval ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   976
      && availableSymbols >= allocationSize)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   977
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   978
      SetIsIrIntrvlAllocated (true);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   979
      OfdmUlMapIe ulMapIeIr;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   980
      ulMapIeIr.SetCid ((GetBs ()->GetBroadcastConnection ())->GetCid ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   981
      ulMapIeIr.SetStartTime (symbolsToAllocation);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   982
      ulMapIeIr.SetUiuc (OfdmUlBurstProfile::UIUC_INITIAL_RANGING);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   983
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   984
      NS_LOG_DEBUG ("BS uplink scheduler, initial ranging allocation, size: " << allocationSize << " symbols"
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   985
                                                                              << ", modulation: BPSK 1/2" );
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   986
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   987
      // marking start and end of each TO, only for debugging
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   988
      for (uint8_t i = 0; i < GetNrIrOppsAllocated (); i++)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   989
        {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   990
          GetBs ()->MarkRangingOppStart (ssUlStartTime + Seconds (symbolsToAllocation
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   991
                                                                  * GetBs ()->GetSymbolDuration ().GetSeconds ()) + Seconds (i * GetBs ()->GetRangReqOppSize ()
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   992
                                                                                                                             * GetBs ()->GetSymbolDuration ().GetSeconds ()));
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   993
        }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   994
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   995
      AddUplinkAllocation (ulMapIeIr, allocationSize, symbolsToAllocation, availableSymbols);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   996
      SetTimeStampIrInterval (Simulator::Now ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   997
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   998
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
   999
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1000
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1001
UplinkSchedulerMBQoS::SetupServiceFlow (SSRecord *ssRecord, ServiceFlow *serviceFlow)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1002
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1003
  uint8_t delayNrFrames = 1;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1004
  uint32_t bitsPerSecond = serviceFlow->GetMinReservedTrafficRate ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1005
  WimaxPhy::ModulationType modulation;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1006
  uint32_t bytesPerFrame =
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1007
    (uint32_t ((double)(bitsPerSecond) * GetBs ()->GetPhy ()->GetFrameDuration ().GetSeconds ())) / 8;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1008
  uint32_t frameDurationMSec = GetBs ()->GetPhy ()->GetFrameDuration ().GetMilliSeconds ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1009
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1010
  switch (serviceFlow->GetSchedulingType ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1011
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1012
    case ServiceFlow::SF_TYPE_UGS:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1013
      {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1014
        if (serviceFlow->GetIsMulticast () == true)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1015
          {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1016
            modulation = serviceFlow->GetModulation ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1017
          }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1018
        else
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1019
          {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1020
            modulation = ssRecord->GetModulationType ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1021
          }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1022
        uint32_t grantSize = GetBs ()->GetPhy ()->GetNrSymbols (bytesPerFrame, modulation);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1023
        serviceFlow->GetRecord ()->SetGrantSize (grantSize);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1024
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1025
        uint32_t toleratedJitter = serviceFlow->GetToleratedJitter ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1026
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1027
        if (toleratedJitter > frameDurationMSec)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1028
          {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1029
            delayNrFrames = (uint8_t)(toleratedJitter / frameDurationMSec);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1030
          }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1031
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1032
        uint16_t interval = delayNrFrames * frameDurationMSec;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1033
        serviceFlow->SetUnsolicitedGrantInterval (interval);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1034
      }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1035
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1036
    case ServiceFlow::SF_TYPE_RTPS:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1037
      {
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1038
        serviceFlow->SetUnsolicitedPollingInterval (20);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1039
      }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1040
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1041
    case ServiceFlow::SF_TYPE_NRTPS:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1042
      {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1043
        // no real-time guarantees are given to NRTPS, serviced based on available bandwidth
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1044
        uint16_t interval = 1000;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1045
        serviceFlow->SetUnsolicitedPollingInterval (interval);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1046
      }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1047
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1048
    case ServiceFlow::SF_TYPE_BE:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1049
      {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1050
        // no real-time guarantees are given to BE, serviced based on available bandwidth
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1051
      }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1052
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1053
    default:
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1054
      NS_FATAL_ERROR ("Invalid scheduling type");
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1055
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1056
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1057
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1058
uint32_t UplinkSchedulerMBQoS::GetPendingSize (ServiceFlow* serviceFlow)
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1059
{
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1060
  uint32_t size = 0;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1061
  std::list<Ptr <PriorityUlJob> > priorityUlJobs;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1062
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1063
  // for each request in the imermediate queue
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1064
  for (std::list<Ptr<UlJob> >::const_iterator iter = m_uplinkJobs_inter.begin (); iter
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
  1065
       != m_uplinkJobs_inter.end (); ++iter)
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1066
    {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1067
      Ptr<UlJob> job = *iter;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1068
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1069
      ServiceFlow *serviceFlowJob = job->GetServiceFlow ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1070
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1071
      if (serviceFlowJob == serviceFlow)
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1072
        {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1073
          size += job->GetSize ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1074
        }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1075
    }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1076
  return size;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1077
}
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1078
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1079
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1080
UplinkSchedulerMBQoS::ProcessBandwidthRequest (const BandwidthRequestHeader &bwRequestHdr)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1081
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1082
  // Enqueue requests for uplink scheduler.
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1083
  Ptr<UlJob> job = CreateObject <UlJob> ();
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1084
  Ptr<WimaxConnection> connection = GetBs ()->GetConnectionManager ()->GetConnection (bwRequestHdr.GetCid ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1085
  SSRecord *ssRecord = GetBs ()->GetSSManager ()->GetSSRecord (connection->GetCid ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1086
  ServiceFlow *serviceFlow = connection->GetServiceFlow ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1087
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1088
  uint32_t size = bwRequestHdr.GetBr ();
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1089
  uint32_t pendingSize = GetPendingSize (serviceFlow);
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1090
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1091
  if (size > pendingSize)
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1092
    {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1093
      size -= pendingSize;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1094
    }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1095
  else
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1096
    {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1097
      size = 0;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1098
    }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1099
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1100
  if (size == 0)
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1101
    {
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1102
      return;
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1103
    }
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1104
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1105
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1106
  Time deadline = DetermineDeadline (serviceFlow);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1107
  Time currentTime = Simulator::Now ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1108
  Time period = deadline; // So that deadline is properly updated..
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1109
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1110
  NS_LOG_DEBUG ("At "<<Simulator::Now ().GetSeconds ()<<" at BS uplink scheduler, processing bandwidth request from." <<
7107
6c0fabb46bce WiMAX code style patch
Flavio Kubota <kubota@lrc.ic.unicamp.br>
parents: 7061
diff changeset
  1111
                ssRecord->GetMacAddress () << " and sf " << serviceFlow->GetSchedulingType () <<" with deadline in " << deadline.GetSeconds () << " and size " << size << " aggreg size " << bwRequestHdr.GetBr ());
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1112
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1113
  // Record data in job
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1114
  job->SetSsRecord (ssRecord);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1115
  job->SetServiceFlow (serviceFlow);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1116
  job->SetSize (size);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1117
  job->SetDeadline (deadline);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1118
  job->SetReleaseTime (currentTime);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1119
  job->SetSchedulingType (serviceFlow->GetSchedulingType ());
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1120
  job->SetPeriod (period);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1121
  job->SetType (DATA);
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1122
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1123
  // Enqueue job in Uplink Scheduler
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1124
  switch (serviceFlow->GetSchedulingType ())
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1125
    {
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1126
    case ServiceFlow::SF_TYPE_RTPS:
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1127
      EnqueueJob (UlJob::INTERMEDIATE, job);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1128
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1129
    case ServiceFlow::SF_TYPE_NRTPS:
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1130
      EnqueueJob (UlJob::INTERMEDIATE, job);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1131
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1132
    case ServiceFlow::SF_TYPE_BE:
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1133
      EnqueueJob (UlJob::LOW, job);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1134
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1135
    default:
6148
163b163dde43 Fix MBQoS uplink scheduler
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 6111
diff changeset
  1136
      EnqueueJob (UlJob::LOW, job);
6111
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1137
      break;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1138
    }
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1139
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1140
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1141
/*
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1142
 * Calculate Deadline of requests according to QoS parameter
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1143
 * */
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1144
Time
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1145
UplinkSchedulerMBQoS::DetermineDeadline (ServiceFlow *serviceFlow)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1146
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1147
  uint32_t latency = serviceFlow->GetMaximumLatency ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1148
  Time lastGrantTime = serviceFlow->GetRecord ()->GetLastGrantTime ();
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1149
  Time deadline = MilliSeconds (latency) + lastGrantTime;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1150
  return deadline;
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1151
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1152
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1153
void
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1154
UplinkSchedulerMBQoS::OnSetRequestedBandwidth (ServiceFlowRecord *sfr)
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1155
{
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1156
  // virtual function on UplinkScheduler
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1157
  // this is not necessary on this implementation
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1158
}
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1159
0b22ae082153 Merge WiMAX module
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents:
diff changeset
  1160
} // namespace ns3