src/devices/wifi/dcf.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 08 Nov 2007 15:25:57 +0100
changeset 2090 3622fda1717b
parent 1969 a3803bfd94f9
permissions -rw-r--r--
calculate the delay, not -delay.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2005 INRIA
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 */
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#include <math.h>
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include "ns3/simulator.h"
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    24
#include "ns3/assert.h"
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    25
#include "ns3/log.h"
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
#include "dcf.h"
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    28
#include "random-stream.h"
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
#include "mac-parameters.h"
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    32
NS_LOG_COMPONENT_DEFINE ("Dcf");
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
namespace ns3 {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    37
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    38
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
DcfAccessListener::DcfAccessListener ()
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
{}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
DcfAccessListener::~DcfAccessListener ()
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
{}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
1969
a3803bfd94f9 fix valgrind warning
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1968
diff changeset
    46
Dcf::Dcf (uint32_t min, uint32_t max)
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
  : m_accessTimerEvent (),
1969
a3803bfd94f9 fix valgrind warning
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1968
diff changeset
    48
    m_cwMin (min),
a3803bfd94f9 fix valgrind warning
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1968
diff changeset
    49
    m_cwMax (max),
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
    m_backoffStart (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
    m_backoffLeft (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
    m_lastNavStart (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
    m_lastNavDuration (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
    m_lastRxStart (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
    m_lastRxDuration (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
    m_lastRxReceivedOk (true),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
    m_lastRxEnd (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
    m_lastTxStart (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
    m_lastTxDuration (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
    m_lastBusyStart (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
    m_lastBusyDuration (MicroSeconds (0)),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
    m_rxing (false)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
  ResetCw ();
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    65
  m_rng = new RealRandomStream ();
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
Dcf::~Dcf ()
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
{
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    70
  delete m_rng;
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
void 
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    74
Dcf::ResetRngForTest (RandomStream *stream)
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
{
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    76
  delete m_rng;
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
    77
  m_rng = stream;
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
void
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
Dcf::SetParameters (MacParameters const*parameters)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
  m_parameters = parameters;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
Dcf::SetDifs (Time difs)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
  m_difs = difs;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
Dcf::SetEifs (Time eifs)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
  m_eifs = eifs;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
Dcf::SetCwBounds (uint32_t min, uint32_t max)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
  m_cwMin = min;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
  m_cwMax = max;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
  m_cw = min;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
Dcf::RegisterAccessListener (DcfAccessListener *listener)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
  m_listener = listener;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
/***************************************************************
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
 *     public API.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
 ***************************************************************/ 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
Dcf::RequestAccess (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
  Time delayUntilAccessGranted = GetDelayUntilAccessGranted (Now ());
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
  if (m_listener->AccessingAndWillNotify ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
      /* don't do anything. We will start a backoff and maybe
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
       * a timer when the txop notifies us of the end-of-access.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
       */
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   122
      NS_LOG_DEBUG ("accessing. will be notified.");
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
    } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
  else if (m_accessTimerEvent.IsRunning ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
      /* we don't need to do anything because we have an access
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
       * timer which will expire soon.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
       */
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   129
      NS_LOG_DEBUG ("access timer running. will be notified");
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
    } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
  else if (IsBackoffNotCompleted (Now ()) && m_accessTimerEvent.IsExpired ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
      /* start timer for ongoing backoff.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
       */
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   135
      NS_LOG_DEBUG ("request access X delayed for="<<delayUntilAccessGranted);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
      m_accessTimerEvent = Simulator::Schedule (delayUntilAccessGranted, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
                                                &Dcf::AccessTimeout, this);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
    } 
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   139
  else if (IsPhyBusy () || IsNavBusy ()) 
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
      /* someone else has accessed the medium.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
       * generate a backoff, start timer.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
       */
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
      StartBackoff ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
    } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
  else if (delayUntilAccessGranted.IsStrictlyPositive ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
      /* medium is IDLE, we have no backoff running but we 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
       * need to wait a bit before accessing the medium.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
       */
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   151
      NS_LOG_DEBUG ("request access Y delayed for="<< delayUntilAccessGranted);
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   152
      NS_ASSERT (m_accessTimerEvent.IsExpired ());
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
      m_accessTimerEvent = Simulator::Schedule (delayUntilAccessGranted, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
                                                &Dcf::AccessTimeout, this);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   155
    } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
  else 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
      /* we can access the medium now.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
       */
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   160
      NS_LOG_DEBUG ("access granted immediatly");
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
      m_listener->AccessGrantedNow ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   165
/***************************************************************
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
 *     Timeout method. Notifies when Access is Granted.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
 ***************************************************************/ 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
Dcf::AccessTimeout ()
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
  UpdateBackoff (Now ());
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
  if (m_backoffLeft.IsZero ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
    {
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   176
      NS_LOG_DEBUG ("timeout access granted");
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   177
      m_listener->AccessGrantedNow ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   178
    } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
  else 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   180
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   181
      Time delayUntilAccessGranted  = GetDelayUntilAccessGranted (Now ());
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   182
      NS_LOG_DEBUG ("timeout access delayed for "<< delayUntilAccessGranted);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
      m_accessTimerEvent = Simulator::Schedule (delayUntilAccessGranted, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   184
                                                &Dcf::AccessTimeout, this);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   185
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
/***************************************************************
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
 *     Random trivial helper methods.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
 ***************************************************************/ 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
Time
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
Dcf::PickBackoffDelay (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
{
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   196
  uint32_t pickedCw = m_rng->GetNext (0, m_cw);
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   197
  NS_LOG_DEBUG ("cw="<<GetCwMin ()<<
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   198
         "<"<<m_cw<<"<"<<GetCwMax ()<<
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   199
         ", picked="<<pickedCw); 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
  Time delay = Scalar (pickedCw) * m_parameters->GetSlotTime ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   201
  return delay;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
void
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
Dcf::ResetCw (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   205
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   206
  m_cw = GetCwMin ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   208
void
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
Dcf::UpdateFailedCw (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   210
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   211
  uint32_t cw = m_cw;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
  cw *= 2;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   213
  if (cw > GetCwMax ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   214
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
      cw = GetCwMax ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
  m_cw = cw;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
Time
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
Dcf::MostRecent (Time a, Time b) const
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
  return Max (a, b);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   224
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   225
Time
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
Dcf::MostRecent (Time a, Time b, Time c) const
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
  Time retval;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
  retval = Max (a, b);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
  retval = Max (retval, c);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
  return retval;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
Time
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
Dcf::MostRecent (Time a, Time b, Time c, Time d) const
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
  Time e = Max (a, b);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
  Time f = Max (c, d);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
  Time retval = Max (e, f);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
  return retval;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   242
Time
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
Dcf::GetDifs (void) const
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
  return m_difs;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
Time
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
Dcf::GetEifs (void) const
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
  return m_eifs;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   252
uint32_t 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
Dcf::GetCwMin (void) const
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
  return m_cwMin;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
uint32_t 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
Dcf::GetCwMax (void) const
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   259
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
  return m_cwMax;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   262
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
/***************************************************************
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
 *     Complicated timekeeping backoff methods.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
 ***************************************************************/ 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
bool 
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   268
Dcf::IsPhyBusy (void) const
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
  if (m_rxing) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
      return true;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   273
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
  Time lastTxEnd = m_lastTxStart + m_lastTxDuration;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
  if (lastTxEnd > Simulator::Now ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
      return true;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   278
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
  return false;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   280
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   282
bool 
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   283
Dcf::IsNavBusy (void) const
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   284
{
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   285
  Time lastNavEnd = m_lastNavStart + m_lastNavDuration;
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   286
  if (lastNavEnd > Simulator::Now ())
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   287
    {
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   288
      return true;
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   289
    }
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   290
  return false;
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   291
}
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   292
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
void
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
Dcf::StartBackoff (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
  Time backoffStart = Now ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
  Time backoffDuration = PickBackoffDelay ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
  m_backoffTrace (backoffDuration);
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   299
  NS_ASSERT (m_backoffStart <= backoffStart);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
  m_backoffStart = backoffStart;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
  m_backoffLeft = backoffDuration;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
  if (m_listener->AccessNeeded () && m_accessTimerEvent.IsExpired ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
      Time delayUntilAccessGranted  = GetDelayUntilAccessGranted (Now ());
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
      if (delayUntilAccessGranted.IsStrictlyPositive ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
        {
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   307
          NS_LOG_DEBUG ("start at "<<backoffStart<<", for "<<backoffDuration);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
          m_accessTimerEvent = Simulator::Schedule (delayUntilAccessGranted,
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
                                                    &Dcf::AccessTimeout, this);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
        } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
      else 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   312
        {
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   313
          NS_LOG_DEBUG ("access granted now");
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
          m_listener->AccessGrantedNow ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
        }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
    } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
  else 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
      if (m_accessTimerEvent.IsRunning ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
        {
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   321
          NS_LOG_DEBUG ("no access needed because timer running.");
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
        } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
      if (!m_listener->AccessNeeded ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
        {
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   325
          NS_LOG_DEBUG ("no access needed.");
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   326
        }
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   327
      NS_LOG_DEBUG ("no access needed for now.");
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   330
Time
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   331
Dcf::GetAccessGrantedStart (void) const
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   332
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
  /* This method evaluates the time where access to the
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   334
   * medium is allowed. The return value could be 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
   * somewhere in the past or in the future.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   336
   */
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   337
  Time rxAccessStart;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   338
  if (m_lastRxEnd >= m_lastRxStart) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   339
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   340
      if (m_lastRxReceivedOk) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   341
        {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   342
          rxAccessStart = m_lastRxEnd + GetDifs ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   343
        } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   344
      else
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
        {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
          rxAccessStart = m_lastRxEnd + GetEifs ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
        }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
    } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
  else 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
      rxAccessStart = m_lastRxStart + m_lastRxDuration + GetDifs ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   353
  Time busyAccessStart = m_lastBusyStart + m_lastBusyDuration + GetDifs ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
  Time txAccessStart = m_lastTxStart + m_lastTxDuration + GetDifs ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   355
  Time navAccessStart = m_lastNavStart + m_lastNavDuration + GetDifs ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   356
  Time accessGrantedStart = MostRecent (rxAccessStart, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   357
                                        busyAccessStart,
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   358
                                        txAccessStart, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   359
                                        navAccessStart);
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   360
  NS_LOG_DEBUG ("access granted start=" << accessGrantedStart);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   361
  return accessGrantedStart;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   362
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   363
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   364
bool
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   365
Dcf::IsBackoffNotCompleted (Time now)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   366
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   367
  UpdateBackoff (now);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   368
  if (m_backoffLeft.IsStrictlyPositive ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   369
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   370
      return true;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   371
    } 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   372
  else 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   374
      return false;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   375
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   376
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   377
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   378
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   379
Time
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   380
Dcf::GetDelayUntilAccessGranted (Time now)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   381
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   382
  Time deltaTo = GetAccessGrantedStart () - now;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   383
  Time retval = Max (deltaTo, Seconds (0));
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   384
  UpdateBackoff (now);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   385
  retval += m_backoffLeft;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   386
  return retval;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   387
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   388
void
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   389
Dcf::UpdateBackoff (Time time)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   390
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   391
  if (m_backoffLeft.IsZero ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   392
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   393
      return;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   394
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   395
  
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   396
  //NS_LOG_DEBUG ("time: %f, backoffstart: %f\n", time, m_backoffStart);
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   397
  NS_ASSERT (time >= m_backoffStart);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   398
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   399
  Time mostRecentEvent = MostRecent (m_backoffStart,
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   400
                                     GetAccessGrantedStart ());
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   401
  if (mostRecentEvent < time) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   402
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   403
      Time newBackoffLeft = m_backoffLeft - (time - mostRecentEvent);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   404
      m_backoffLeft = Max (newBackoffLeft, Seconds (0)); 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   405
      m_backoffStart = time;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   406
    }
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   407
  NS_LOG_DEBUG ("backoff at="<<m_backoffStart<<", left="<< m_backoffLeft);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   408
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   409
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   410
/***************************************************************
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   411
 *     Notification methods.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   412
 ***************************************************************/ 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   413
void
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   414
Dcf::NotifyNavReset (Time navStart, Time duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   415
{
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   416
  NS_LOG_DEBUG ("nav reset at="<<navStart<<", for="<<duration);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   417
  m_lastNavStart = navStart;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   418
  m_lastNavDuration = duration;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   419
  Time navEnd = navStart + duration;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   420
  Time newDelayUntilAccessGranted = GetDelayUntilAccessGranted (navEnd);
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   421
  NS_ASSERT (newDelayUntilAccessGranted.IsStrictlyPositive ());
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   422
  /* This is quite unfortunate but we need to cancel the access timer
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   423
   * because this nav reset might have brought the time of
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   424
   * possible access closer to us than expected.
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   425
   */
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   426
  if (m_accessTimerEvent.IsRunning ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   427
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   428
      m_accessTimerEvent.Cancel ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   429
      m_accessTimerEvent = Simulator::Schedule (newDelayUntilAccessGranted,
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   430
                                                &Dcf::AccessTimeout, this);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   431
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   432
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   433
void
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   434
Dcf::NotifyNavStart (Time navStart, Time duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   435
{
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   436
  NS_ASSERT (m_lastNavStart < navStart);
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   437
  NS_LOG_DEBUG ("nav start at="<<navStart<<", for="<<duration);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   438
  UpdateBackoff (navStart);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   439
  m_lastNavStart = navStart;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   440
  m_lastNavDuration = duration;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   441
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   442
void
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   443
Dcf::NotifyNavContinue (Time navStart, Time duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   444
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   445
  NotifyNavStart (navStart, duration);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   446
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   447
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   448
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   449
Dcf::NotifyRxStartNow (Time duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   450
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   451
  Time now = Now ();
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   452
  NS_LOG_DEBUG ("rx start at="<<now<<", for="<<duration);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   453
  UpdateBackoff (now);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   454
  m_lastRxStart = now;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   455
  m_lastRxDuration = duration;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   456
  m_rxing = true;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   457
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   458
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   459
Dcf::NotifyRxEndOkNow (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   460
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   461
  Time now = Now ();
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   462
  NS_LOG_DEBUG ("rx end ok at="<<now);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   463
  m_lastRxEnd = now;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   464
  m_lastRxReceivedOk = true;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   465
  m_rxing = false;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   466
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   467
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   468
Dcf::NotifyRxEndErrorNow (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   469
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   470
  Time now = Now ();
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   471
  NS_LOG_DEBUG ("rx end error at=");
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   472
  m_lastRxEnd = now;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   473
  m_lastRxReceivedOk = false;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   474
  m_rxing = false;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   475
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   476
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   477
Dcf::NotifyTxStartNow (Time duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   478
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   479
  Time now = Now ();
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   480
  NS_LOG_DEBUG ("tx start at="<<now<<" for "<<duration);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   481
  UpdateBackoff (now);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   482
  m_lastTxStart = now;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   483
  m_lastTxDuration = duration;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   484
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   485
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   486
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   487
Dcf::NotifyCcaBusyStartNow (Time duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   488
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   489
  Time now = Now ();
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   490
  NS_LOG_DEBUG ("busy start at="<<now<<" for "<<duration);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   491
  UpdateBackoff (now);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   492
  m_lastBusyStart = now;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   493
  m_lastBusyDuration = duration;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   494
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   495
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   496
} // namespace ns3
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   497
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   498
#ifdef RUN_SELF_TESTS
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   499
#include "ns3/test.h"
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   500
#include <list>
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   501
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   502
namespace ns3 {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   503
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   504
class DcfTest : public Test {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   505
public:
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   506
  DcfTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   507
  virtual bool RunTests (void);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   508
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   509
  // callback from DcfListener
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   510
  void AccessGrantedNow (void);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   511
  bool AccessNeeded (void);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   512
  bool AccessingAndWillNotify (void);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   513
private:
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   514
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   515
  void AddRxOkEvt (uint64_t at, uint64_t duration);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   516
  void AddRxErrorEvt (uint64_t at, uint64_t duration);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   517
  void AddTxEvt (uint64_t at, uint64_t duration);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   518
  void AddNavReset (uint64_t at, uint64_t start, uint64_t duration);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   519
  void AddNavStart (uint64_t at, uint64_t start, uint64_t duration);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   520
  void AddNavContinue (uint64_t at, uint64_t start, uint64_t duration);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   521
  void AddAccessRequest (uint64_t time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   522
  void AddAccessError (uint64_t time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   523
  void AddAccessErrorButOk (uint64_t time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   524
  void AddAccessOk (uint64_t time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   525
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   526
  void ExpectAccessGranted (uint64_t time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   527
  
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   528
  // callback to forward to DCF
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   529
  void AccessError (uint64_t time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   530
  void AccessErrorButOk (uint64_t time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   531
  void AccessOk (uint64_t time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   532
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   533
  void StartTest (void);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   534
  void EndTest (void);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   535
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   536
  Dcf *m_dcf;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   537
  MacParameters *m_parameters;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   538
  class TestAccessListener *m_listener;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   539
  std::list<uint64_t> m_accessGrantedExpected;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   540
  bool m_failed;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   541
};
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   542
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   543
class TestAccessListener : public DcfAccessListener {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   544
public:
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   545
  TestAccessListener (DcfTest *test)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   546
    : m_test (test) {}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   547
  virtual ~TestAccessListener () {}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   548
  virtual void AccessGrantedNow (void) {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   549
    m_test->AccessGrantedNow ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   550
  }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   551
  virtual bool AccessNeeded (void) {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   552
    return m_test->AccessNeeded ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   553
  }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   554
  virtual bool AccessingAndWillNotify (void) {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   555
    return m_test->AccessingAndWillNotify ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   556
  }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   557
private:
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   558
  DcfTest *m_test;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   559
};
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   560
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   561
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   562
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   563
DcfTest::DcfTest ()
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   564
  : Test ("Dcf") {}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   565
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   566
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   567
DcfTest::AccessGrantedNow (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   568
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   569
  if (m_accessGrantedExpected.empty ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   570
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   571
      Failure () << "DCF "
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   572
                 << "Failure: unexpected access granted at="<<Simulator::Now ()
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   573
                 << std::endl;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   574
      m_failed = true;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   575
      return;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   576
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   577
  uint64_t expected = m_accessGrantedExpected.front ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   578
  uint64_t actual = Simulator::Now ().GetMicroSeconds ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   579
  if (expected != actual) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   580
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   581
      Failure () << "DCF "
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   582
                 << "Failure: access granted at=" << Simulator::Now ()
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   583
                 << ", expected at="<<expected<<"us"
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   584
                 << std::endl;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   585
      m_failed = true;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   586
      return;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   587
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   588
  m_accessGrantedExpected.erase (m_accessGrantedExpected.begin ());
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   589
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   590
bool 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   591
DcfTest::AccessNeeded (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   592
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   593
  return true;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   594
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   595
bool 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   596
DcfTest::AccessingAndWillNotify (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   597
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   598
  return false;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   599
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   600
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   601
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   602
DcfTest::AddRxOkEvt (uint64_t at, uint64_t duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   603
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   604
  Simulator::Schedule (MicroSeconds (at) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   605
                       &Dcf::NotifyRxStartNow, m_dcf, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   606
                       MicroSeconds (duration));
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   607
  Simulator::Schedule (MicroSeconds (at+duration) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   608
                       &Dcf::NotifyRxEndOkNow, m_dcf);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   609
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   610
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   611
DcfTest::AddRxErrorEvt (uint64_t at, uint64_t duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   612
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   613
  Simulator::Schedule (MicroSeconds (at) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   614
                       &Dcf::NotifyRxStartNow, m_dcf, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   615
                       MicroSeconds (duration));
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   616
  Simulator::Schedule (MicroSeconds (at+duration) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   617
                       &Dcf::NotifyRxEndErrorNow, m_dcf);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   618
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   619
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   620
DcfTest::AddTxEvt (uint64_t at, uint64_t duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   621
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   622
  Simulator::Schedule (MicroSeconds (at) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   623
                       &Dcf::NotifyTxStartNow, m_dcf, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   624
                       MicroSeconds (duration));
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   625
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   626
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   627
DcfTest::AddNavReset (uint64_t at, uint64_t start, uint64_t duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   628
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   629
  Simulator::Schedule (MicroSeconds (at) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   630
                       &Dcf::NotifyNavReset, m_dcf, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   631
                       MicroSeconds (start), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   632
                       MicroSeconds (duration));
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   633
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   634
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   635
DcfTest::AddNavStart (uint64_t at, uint64_t start, uint64_t duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   636
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   637
  Simulator::Schedule (MicroSeconds (at) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   638
                       &Dcf::NotifyNavStart, m_dcf, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   639
                       MicroSeconds (start), MicroSeconds (duration));
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   640
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   641
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   642
DcfTest::AddNavContinue (uint64_t at, uint64_t start, uint64_t duration)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   643
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   644
  Simulator::Schedule (MicroSeconds (at) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   645
                       &Dcf::NotifyNavContinue, m_dcf, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   646
                       MicroSeconds (start), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   647
                       MicroSeconds (duration));
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   648
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   649
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   650
DcfTest::AddAccessRequest (uint64_t time)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   651
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   652
  Simulator::Schedule (MicroSeconds (time) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   653
                       &Dcf::RequestAccess, m_dcf);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   654
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   655
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   656
DcfTest::AddAccessError (uint64_t time)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   657
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   658
  Simulator::Schedule (MicroSeconds (time) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   659
                       &DcfTest::AccessError, this, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   660
                       time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   661
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   662
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   663
DcfTest::AddAccessErrorButOk (uint64_t time)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   664
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   665
  Simulator::Schedule (MicroSeconds (time) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   666
                       &DcfTest::AccessErrorButOk, this, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   667
                       time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   668
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   669
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   670
DcfTest::AddAccessOk (uint64_t time)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   671
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   672
  Simulator::Schedule (MicroSeconds (time) - Now (), 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   673
                       &DcfTest::AccessOk, this, 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   674
                       time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   675
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   676
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   677
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   678
DcfTest::AccessError (uint64_t time)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   679
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   680
  m_dcf->UpdateFailedCw ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   681
  m_dcf->StartBackoff ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   682
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   683
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   684
DcfTest::AccessErrorButOk (uint64_t time)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   685
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   686
  m_dcf->ResetCw ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   687
  m_dcf->StartBackoff ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   688
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   689
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   690
DcfTest::AccessOk (uint64_t time)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   691
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   692
  m_dcf->ResetCw ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   693
  m_dcf->StartBackoff ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   694
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   695
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   696
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   697
DcfTest::ExpectAccessGranted (uint64_t time)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   698
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   699
  m_accessGrantedExpected.push_back (time);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   700
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   701
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   702
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   703
DcfTest::StartTest (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   704
{
1969
a3803bfd94f9 fix valgrind warning
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1968
diff changeset
   705
  m_dcf = new Dcf (8, 64);
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   706
  TestRandomStream *stream = new TestRandomStream ();
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   707
  stream->AddNext (1);
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   708
  stream->AddNext (1);
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   709
  stream->AddNext (1);
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   710
  stream->AddNext (1);
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   711
  stream->AddNext (1);
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   712
  stream->AddNext (1);
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   713
  m_dcf->ResetRngForTest (stream);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   714
  m_parameters = new MacParameters ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   715
  m_listener = new TestAccessListener (this);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   716
  m_dcf->SetParameters (m_parameters);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   717
  m_dcf->RegisterAccessListener (m_listener);  
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   718
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   719
  m_parameters->SetSlotTime (MicroSeconds (1));
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   720
  m_dcf->SetDifs (MicroSeconds (3));
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   721
  m_dcf->SetEifs (MicroSeconds (4));
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   722
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   723
void 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   724
DcfTest::EndTest (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   725
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   726
  if (!m_accessGrantedExpected.empty ()) 
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   727
    {
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   728
      Failure () << "DCF: access not granted as expected"
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   729
                 << std::endl;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   730
    }
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   731
  m_accessGrantedExpected.erase (m_accessGrantedExpected.begin (),
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   732
                                 m_accessGrantedExpected.end ());
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   733
  Simulator::Destroy ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   734
  delete m_dcf;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   735
  delete m_parameters;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   736
  delete m_listener;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   737
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   738
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   739
bool
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   740
DcfTest::RunTests (void)
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   741
{
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   742
  m_failed = false;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   743
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   744
  //                    32        37
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   745
  //                     | rx ok   |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   746
  // | idle   |  rx ok | nav busy      | difs  | backoff |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   747
  // 0       10       30              40      43        44
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   748
  //
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   749
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   750
  AddRxOkEvt (10, 20);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   751
  AddNavStart (30, 30, 2+8);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   752
  AddRxOkEvt (32, 5);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   753
  AddAccessRequest (15);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   754
  AddAccessRequest (16);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   755
  AddAccessRequest (20);
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   756
  ExpectAccessGranted (44);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   757
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   758
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   759
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   760
  //                    32           39
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   761
  //                     | rx ok      |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   762
  // | idle   |  rx ok | nav busy  |  | difs  | backoff |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   763
  // 0       10       30          37         42        43
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   764
  //
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   765
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   766
  AddRxOkEvt (10, 20);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   767
  AddNavStart (30, 30, 2+5);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   768
  AddRxOkEvt (32, 7);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   769
  AddAccessRequest (15);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   770
  AddAccessRequest (16);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   771
  AddAccessRequest (20);
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   772
  ExpectAccessGranted (43);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   773
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   774
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   775
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   776
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   777
  AddAccessRequest (10);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   778
  ExpectAccessGranted (10);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   779
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   780
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   781
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   782
  //                    32        39
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   783
  //                     | rx ok   |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   784
  // | idle   |  rx ok | nav busy    | difs  |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   785
  // 0       10       30            40      43
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   786
  //
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   787
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   788
  AddRxOkEvt (10, 20);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   789
  AddNavStart (30, 30, 2+8);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   790
  AddRxOkEvt (32, 7);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   791
  AddAccessRequest (40);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   792
  ExpectAccessGranted (43);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   793
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   794
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   795
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   796
  //                    32        39
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   797
  //                     | rx ok   |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   798
  // | idle   |  rx ok | nav busy    | difs  |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   799
  // 0       10       30            40      43
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   800
  //
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   801
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   802
  AddRxOkEvt (10, 20);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   803
  AddNavStart (30, 30, 2+8);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   804
  AddRxOkEvt (32, 7);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   805
  AddAccessRequest (41);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   806
  ExpectAccessGranted (43);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   807
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   808
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   809
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   810
  //                    32        39
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   811
  //                     | rx ok   |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   812
  // | idle   |  rx ok | nav busy    | difs  |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   813
  // 0       10       30            40      43
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   814
  //
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   815
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   816
  AddRxOkEvt (10, 20);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   817
  AddNavStart (30, 30, 2+8);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   818
  AddRxOkEvt (32, 7);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   819
  AddAccessRequest (43);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   820
  ExpectAccessGranted (43);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   821
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   822
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   823
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   824
  //
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   825
  // | idle   |  rx error | idle   | rx ok  | difs |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   826
  // 0       10          30       31       38     41
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   827
  //
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   828
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   829
  AddRxErrorEvt (10, 20);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   830
  AddRxOkEvt (31, 7);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   831
  AddAccessRequest (39);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   832
  ExpectAccessGranted (41);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   833
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   834
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   835
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   836
  //
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   837
  // | idle   |  rx error | idle   | rx error  | eifs |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   838
  // 0       10          30       31          38     42
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   839
  //
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   840
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   841
  AddRxErrorEvt (10, 20);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   842
  AddRxErrorEvt (31, 7);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   843
  AddAccessRequest (39);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   844
  ExpectAccessGranted (42);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   845
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   846
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   847
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   848
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   849
  //
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   850
  //                  30               45
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   851
  //                   | nav busy       |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   852
  // | idle   |  rx ok | idle   | rx ok | difs | backoff |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   853
  // 0       10       30       35      45     48        49
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   854
  //
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   855
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   856
  AddRxOkEvt (10, 20);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   857
  AddNavStart (30, 30, 200);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   858
  AddRxOkEvt (35, 10);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   859
  AddNavReset (45, 45, 0);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   860
  AddAccessRequest (32);
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   861
  ExpectAccessGranted (49);
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   862
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   863
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   864
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   865
  //
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   866
  //                  30               45
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   867
  //                   | nav busy       |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   868
  // | idle   |  rx ok | idle   | rx ok | 
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   869
  // 0       10       30       35      45 
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   870
  //
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   871
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   872
  AddRxOkEvt (10, 20);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   873
  AddNavStart (30, 30, 200);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   874
  AddRxOkEvt (35, 10);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   875
  AddNavReset (45, 45, 0);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   876
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   877
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   878
1968
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   879
  //
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   880
  //                  30               45
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   881
  //                   | nav busy       |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   882
  // | idle   |  rx ok | idle   | rx ok | difs |
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   883
  // 0       10       30       35      45     48
1bf97adf7f56 use the new RandomStream class and fix a small bug in the testsuite
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1923
diff changeset
   884
  //
1923
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   885
  StartTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   886
  AddRxOkEvt (10, 20);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   887
  AddNavStart (30, 30, 200);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   888
  AddRxOkEvt (35, 10);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   889
  AddNavReset (45, 45, 0);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   890
  AddAccessRequest (49);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   891
  ExpectAccessGranted (49);
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   892
  Simulator::Run ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   893
  EndTest ();
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   894
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   895
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   896
  return !m_failed;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   897
}
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   898
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   899
static DcfTest gDcfTest;
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   900
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   901
} // namespace ns3
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   902
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   903
a8caecf6637f add Dcf to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   904
#endif /* RUN_SELF_TESTS */