src/wifi/model/mac-low.cc
author Daniel Lertpratchya <nikkipui@gmail.com>
Mon, 14 Oct 2013 10:27:43 -0400
changeset 10216 48e0bcbc4281
parent 10201 8bdf35df4bf1
child 10459 f2e90c12a44f
permissions -rw-r--r--
Bug 1691 - RTS/CTS NAV reset prematurely
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7333
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
     4
 * Copyright (c) 2009 MIRKO BANCHI
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
    20
 * Author: Mirko Banchi <mk.banchi@gmail.com>
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
 */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
    23
#include "ns3/assert.h"
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include "ns3/packet.h"
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "ns3/simulator.h"
3041
a624276a897b mtag -> tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3040
diff changeset
    26
#include "ns3/tag.h"
1979
d535a38b7fc4 convert TRACE to NS_LOG
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1978
diff changeset
    27
#include "ns3/log.h"
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    28
#include "ns3/node.h"
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
    29
#include "ns3/double.h"
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
#include "mac-low.h"
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
#include "wifi-phy.h"
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
#include "wifi-mac-trailer.h"
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
    34
#include "qos-utils.h"
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
    35
#include "edca-txop-n.h"
9234
310d371059d5 Bug 1566 - WiFi SNR tag improvements
Konstantinos Katsaros <dinos.katsaros@gmail.com>
parents: 9176
diff changeset
    36
#include "snr-tag.h"
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
1979
d535a38b7fc4 convert TRACE to NS_LOG
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1978
diff changeset
    38
NS_LOG_COMPONENT_DEFINE ("MacLow");
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
    40
#undef NS_LOG_APPEND_CONTEXT
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
    41
#define NS_LOG_APPEND_CONTEXT std::clog << "[mac=" << m_self << "] "
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
    42
1993
e665fb7cea73 add time to debug output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1990
diff changeset
    43
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
namespace ns3 {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
MacLowTransmissionListener::MacLowTransmissionListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    47
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    48
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
MacLowTransmissionListener::~MacLowTransmissionListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    50
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    51
}
5955
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    52
void
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    53
MacLowTransmissionListener::GotBlockAck (const CtrlBAckResponseHeader *blockAck,
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    54
                                         Mac48Address source)
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    55
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    56
}
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
    57
void
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
    58
MacLowTransmissionListener::MissedBlockAck (void)
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    59
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    60
}
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
    61
MacLowDcfListener::MacLowDcfListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    62
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    63
}
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
    64
MacLowDcfListener::~MacLowDcfListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    65
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    66
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
    68
MacLowBlockAckEventListener::MacLowBlockAckEventListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    69
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    70
}
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
    71
MacLowBlockAckEventListener::~MacLowBlockAckEventListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    72
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    73
}
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
    74
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
MacLowTransmissionParameters::MacLowTransmissionParameters ()
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
  : m_nextSize (0),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
    m_waitAck (ACK_NONE),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
    m_sendRts (false),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
    m_overrideDurationId (Seconds (0))
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    80
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    81
}
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    82
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
MacLowTransmissionParameters::EnableNextData (uint32_t size)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
  m_nextSize = size;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    87
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
MacLowTransmissionParameters::DisableNextData (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
  m_nextSize = 0;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    92
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
MacLowTransmissionParameters::EnableOverrideDurationId (Time durationId)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
  m_overrideDurationId = durationId;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    97
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
MacLowTransmissionParameters::DisableOverrideDurationId (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
  m_overrideDurationId = Seconds (0);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   102
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
MacLowTransmissionParameters::EnableSuperFastAck (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
  m_waitAck = ACK_SUPER_FAST;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
}
5954
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   107
void
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   108
MacLowTransmissionParameters::EnableBasicBlockAck (void)
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   109
{
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   110
  m_waitAck = BLOCK_ACK_BASIC;
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   111
}
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   112
void
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   113
MacLowTransmissionParameters::EnableCompressedBlockAck (void)
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   114
{
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   115
  m_waitAck = BLOCK_ACK_COMPRESSED;
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   116
}
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   117
void
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   118
MacLowTransmissionParameters::EnableMultiTidBlockAck (void)
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   119
{
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   120
  m_waitAck = BLOCK_ACK_MULTI_TID;
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   121
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   122
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
MacLowTransmissionParameters::EnableFastAck (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
  m_waitAck = ACK_FAST;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   127
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
MacLowTransmissionParameters::EnableAck (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
  m_waitAck = ACK_NORMAL;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   132
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
MacLowTransmissionParameters::DisableAck (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
  m_waitAck = ACK_NONE;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   137
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
MacLowTransmissionParameters::EnableRts (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
  m_sendRts = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   142
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
MacLowTransmissionParameters::DisableRts (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
  m_sendRts = false;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   147
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
MacLowTransmissionParameters::MustWaitAck (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   150
  return (m_waitAck != ACK_NONE);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   152
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
MacLowTransmissionParameters::MustWaitNormalAck (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   155
  return (m_waitAck == ACK_NORMAL);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   157
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
MacLowTransmissionParameters::MustWaitFastAck (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   160
  return (m_waitAck == ACK_FAST);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   162
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
MacLowTransmissionParameters::MustWaitSuperFastAck (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   165
  return (m_waitAck == ACK_SUPER_FAST);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
}
5954
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   167
bool
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   168
MacLowTransmissionParameters::MustWaitBasicBlockAck (void) const
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   169
{
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   170
  return (m_waitAck == BLOCK_ACK_BASIC) ? true : false;
5954
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   171
}
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   172
bool
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   173
MacLowTransmissionParameters::MustWaitCompressedBlockAck (void) const
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   174
{
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   175
  return (m_waitAck == BLOCK_ACK_COMPRESSED) ? true : false;
5954
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   176
}
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   177
bool
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   178
MacLowTransmissionParameters::MustWaitMultiTidBlockAck (void) const
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   179
{
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   180
  return (m_waitAck == BLOCK_ACK_MULTI_TID) ? true : false;
5954
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   181
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   182
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
MacLowTransmissionParameters::MustSendRts (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   184
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   185
  return m_sendRts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   187
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
MacLowTransmissionParameters::HasDurationId (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   190
  return (m_overrideDurationId != Seconds (0));
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
Time
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
MacLowTransmissionParameters::GetDurationId (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
{
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   195
  NS_ASSERT (m_overrideDurationId != Seconds (0));
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
  return m_overrideDurationId;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   198
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   199
MacLowTransmissionParameters::HasNextPacket (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   201
  return (m_nextSize != 0);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   203
uint32_t
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
MacLowTransmissionParameters::GetNextPacketSize (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   205
{
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   206
  NS_ASSERT (HasNextPacket ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
  return m_nextSize;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   208
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   210
std::ostream &operator << (std::ostream &os, const MacLowTransmissionParameters &params)
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   211
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   212
  os << "["
7252
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7141
diff changeset
   213
  << "send rts=" << params.m_sendRts << ", "
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7141
diff changeset
   214
  << "next size=" << params.m_nextSize << ", "
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7141
diff changeset
   215
  << "dur=" << params.m_overrideDurationId << ", "
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7141
diff changeset
   216
  << "ack=";
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   217
  switch (params.m_waitAck)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   218
    {
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   219
    case MacLowTransmissionParameters::ACK_NONE:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   220
      os << "none";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   221
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   222
    case MacLowTransmissionParameters::ACK_NORMAL:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   223
      os << "normal";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   224
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   225
    case MacLowTransmissionParameters::ACK_FAST:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   226
      os << "fast";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   227
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   228
    case MacLowTransmissionParameters::ACK_SUPER_FAST:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   229
      os << "super-fast";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   230
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   231
    case MacLowTransmissionParameters::BLOCK_ACK_BASIC:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   232
      os << "basic-block-ack";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   233
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   234
    case MacLowTransmissionParameters::BLOCK_ACK_COMPRESSED:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   235
      os << "compressed-block-ack";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   236
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   237
    case MacLowTransmissionParameters::BLOCK_ACK_MULTI_TID:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   238
      os << "multi-tid-block-ack";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   239
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   240
    }
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   241
  os << "]";
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   242
  return os;
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   243
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   245
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   246
/***************************************************************
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   247
 *         Listener for PHY events. Forwards to MacLow
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   248
 ***************************************************************/
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   249
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   250
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   251
class PhyMacLowListener : public ns3::WifiPhyListener
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   252
{
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   253
public:
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   254
  PhyMacLowListener (ns3::MacLow *macLow)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   255
    : m_macLow (macLow)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   256
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   257
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   258
  virtual ~PhyMacLowListener ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   259
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   260
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   261
  virtual void NotifyRxStart (Time duration)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   262
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   263
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   264
  virtual void NotifyRxEndOk (void)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   265
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   266
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   267
  virtual void NotifyRxEndError (void)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   268
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   269
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   270
  virtual void NotifyTxStart (Time duration)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   271
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   272
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   273
  virtual void NotifyMaybeCcaBusyStart (Time duration)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   274
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   275
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   276
  virtual void NotifySwitchingStart (Time duration)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   277
  {
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   278
    m_macLow->NotifySwitchingStartNow (duration);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   279
  }
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   280
private:
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   281
  ns3::MacLow *m_macLow;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   282
};
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   283
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   284
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   285
MacLow::MacLow ()
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
  : m_normalAckTimeoutEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
    m_fastAckTimeoutEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
    m_superFastAckTimeoutEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
    m_fastAckFailedTimeoutEvent (),
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   290
    m_blockAckTimeoutEvent (),
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
    m_ctsTimeoutEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
    m_sendCtsEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
    m_sendAckEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
    m_sendDataEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
    m_waitSifsEvent (),
9176
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   296
    m_endTxNoAckEvent (),
2286
3704959cf153 ensure m_listener is initialized properly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
   297
    m_currentPacket (0),
3704959cf153 ensure m_listener is initialized properly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
   298
    m_listener (0)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   300
  NS_LOG_FUNCTION (this);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
  m_lastNavDuration = Seconds (0);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
  m_lastNavStart = Seconds (0);
7333
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   303
  m_promisc = false;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
MacLow::~MacLow ()
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   307
{
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   308
  NS_LOG_FUNCTION (this);
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   309
}
2530
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   310
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   311
void
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   312
MacLow::SetupPhyMacLowListener (Ptr<WifiPhy> phy)
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   313
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   314
  m_phyMacLowListener = new PhyMacLowListener (this);
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   315
  phy->RegisterListener (m_phyMacLowListener);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   316
}
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   317
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   318
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   319
void
2530
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   320
MacLow::DoDispose (void)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   322
  NS_LOG_FUNCTION (this);
5846
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   323
  m_normalAckTimeoutEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   324
  m_fastAckTimeoutEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   325
  m_superFastAckTimeoutEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   326
  m_fastAckFailedTimeoutEvent.Cancel ();
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   327
  m_blockAckTimeoutEvent.Cancel ();
5846
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   328
  m_ctsTimeoutEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   329
  m_sendCtsEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   330
  m_sendAckEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   331
  m_sendDataEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   332
  m_waitSifsEvent.Cancel ();
9176
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   333
  m_endTxNoAckEvent.Cancel ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   334
   m_waitRifsEvent.Cancel();
2054
ba8e810bae4c derive WifiPhy from Object and manage it with a Ptr<>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2024
diff changeset
   335
  m_phy = 0;
2530
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   336
  m_stationManager = 0;
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   337
  delete m_phyMacLowListener;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   338
  m_phyMacLowListener = 0;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   339
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   340
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   341
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   342
MacLow::CancelAllEvents (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   343
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   344
  NS_LOG_FUNCTION (this);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
  bool oneRunning = false;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   346
  if (m_normalAckTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
      m_normalAckTimeoutEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   351
  if (m_fastAckTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   353
      m_fastAckTimeoutEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   355
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   356
  if (m_superFastAckTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   357
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   358
      m_superFastAckTimeoutEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   359
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   360
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   361
  if (m_fastAckFailedTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   362
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   363
      m_fastAckFailedTimeoutEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   364
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   365
    }
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   366
  if (m_blockAckTimeoutEvent.IsRunning ())
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   367
    {
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   368
      m_blockAckTimeoutEvent.Cancel ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   369
      oneRunning = true;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   370
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   371
  if (m_ctsTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   372
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
      m_ctsTimeoutEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   374
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   375
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   376
  if (m_sendCtsEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   377
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   378
      m_sendCtsEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   379
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   380
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   381
  if (m_sendAckEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   382
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   383
      m_sendAckEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   384
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   385
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   386
  if (m_sendDataEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   387
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   388
      m_sendDataEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   389
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   390
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   391
  if (m_waitSifsEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   392
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   393
      m_waitSifsEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   394
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   395
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   396
  if (m_waitRifsEvent.IsRunning ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   397
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   398
      m_waitRifsEvent.Cancel ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   399
      oneRunning = true;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   400
    }
9176
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   401
  if (m_endTxNoAckEvent.IsRunning ()) 
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   402
    {
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   403
      m_endTxNoAckEvent.Cancel ();
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   404
      oneRunning = true;
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   405
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   406
  if (oneRunning && m_listener != 0)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   407
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   408
      m_listener->Cancel ();
2286
3704959cf153 ensure m_listener is initialized properly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
   409
      m_listener = 0;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   410
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   411
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   412
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   413
void
2054
ba8e810bae4c derive WifiPhy from Object and manage it with a Ptr<>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2024
diff changeset
   414
MacLow::SetPhy (Ptr<WifiPhy> phy)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   415
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   416
  m_phy = phy;
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   417
  m_phy->SetReceiveOkCallback (MakeCallback (&MacLow::ReceiveOk, this));
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   418
  m_phy->SetReceiveErrorCallback (MakeCallback (&MacLow::ReceiveError, this));
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   419
  SetupPhyMacLowListener (phy);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   420
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   421
void
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   422
MacLow::SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> manager)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   423
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   424
  m_stationManager = manager;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   425
}
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   426
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   427
void
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   428
MacLow::SetAddress (Mac48Address ad)
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   429
{
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   430
  m_self = ad;
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   431
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   432
void
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   433
MacLow::SetAckTimeout (Time ackTimeout)
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   434
{
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   435
  m_ackTimeout = ackTimeout;
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   436
}
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   437
void
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   438
MacLow::SetBasicBlockAckTimeout (Time blockAckTimeout)
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   439
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   440
  m_basicBlockAckTimeout = blockAckTimeout;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   441
}
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   442
void
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   443
MacLow::SetCompressedBlockAckTimeout (Time blockAckTimeout)
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   444
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   445
  m_compressedBlockAckTimeout = blockAckTimeout;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   446
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   447
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   448
MacLow::SetCtsToSelfSupported (bool enable)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   449
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   450
  m_ctsToSelfSupported = enable;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   451
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   452
bool
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   453
MacLow::GetCtsToSelfSupported () const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   454
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   455
  return m_ctsToSelfSupported;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   456
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   457
void
3597
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   458
MacLow::SetCtsTimeout (Time ctsTimeout)
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   459
{
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   460
  m_ctsTimeout = ctsTimeout;
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   461
}
3598
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   462
void
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   463
MacLow::SetSifs (Time sifs)
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   464
{
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   465
  m_sifs = sifs;
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   466
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   467
void
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   468
MacLow::SetSlotTime (Time slotTime)
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   469
{
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   470
  m_slotTime = slotTime;
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   471
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   472
void
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   473
MacLow::SetPifs (Time pifs)
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   474
{
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   475
  m_pifs = pifs;
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   476
}
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   477
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   478
MacLow::SetRifs (Time rifs)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   479
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   480
  m_rifs = rifs;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   481
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   482
void
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   483
MacLow::SetBssid (Mac48Address bssid)
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   484
{
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   485
  m_bssid = bssid;
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   486
}
7333
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   487
void
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   488
MacLow::SetPromisc (void)
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   489
{
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   490
  m_promisc = true;
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   491
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   492
Mac48Address
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   493
MacLow::GetAddress (void) const
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   494
{
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   495
  return m_self;
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   496
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   497
Time
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   498
MacLow::GetAckTimeout (void) const
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   499
{
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   500
  return m_ackTimeout;
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   501
}
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   502
Time
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   503
MacLow::GetBasicBlockAckTimeout () const
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   504
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   505
  return m_basicBlockAckTimeout;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   506
}
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   507
Time
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   508
MacLow::GetCompressedBlockAckTimeout () const
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   509
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   510
  return m_compressedBlockAckTimeout;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   511
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   512
Time
3597
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   513
MacLow::GetCtsTimeout (void) const
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   514
{
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   515
  return m_ctsTimeout;
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   516
}
3598
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   517
Time
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   518
MacLow::GetSifs (void) const
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   519
{
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   520
  return m_sifs;
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   521
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   522
Time
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   523
MacLow::GetRifs (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   524
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   525
  return m_rifs;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   526
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   527
Time
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   528
MacLow::GetSlotTime (void) const
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   529
{
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   530
  return m_slotTime;
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   531
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   532
Time
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   533
MacLow::GetPifs (void) const
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   534
{
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   535
  return m_pifs;
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   536
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   537
Mac48Address
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   538
MacLow::GetBssid (void) const
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   539
{
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   540
  return m_bssid;
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   541
}
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   542
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   543
void
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   544
MacLow::SetRxCallback (Callback<void,Ptr<Packet>,const WifiMacHeader *> callback)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   545
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   546
  m_rxCallback = callback;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   547
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   548
void
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
   549
MacLow::RegisterDcfListener (MacLowDcfListener *listener)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   550
{
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
   551
  m_dcfListeners.push_back (listener);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   552
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   553
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   554
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   555
void
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   556
MacLow::StartTransmission (Ptr<const Packet> packet,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   557
                           const WifiMacHeader* hdr,
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   558
                           MacLowTransmissionParameters params,
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   559
                           MacLowTransmissionListener *listener)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   560
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   561
  NS_LOG_FUNCTION (this << packet << hdr << params << listener);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   562
  /* m_currentPacket is not NULL because someone started
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   563
   * a transmission and was interrupted before one of:
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   564
   *   - ctsTimeout
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   565
   *   - sendDataAfterCTS
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   566
   * expired. This means that one of these timers is still
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   567
   * running. They are all cancelled below anyway by the
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   568
   * call to CancelAllEvents (because of at least one
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   569
   * of these two timer) which will trigger a call to the
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   570
   * previous listener's cancel method.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   571
   *
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   572
   * This typically happens because the high-priority
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   573
   * QapScheduler has taken access to the channel from
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   574
   * one of the Edca of the QAP.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   575
   */
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
   576
  m_currentPacket = packet->Copy ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   577
  m_currentHdr = *hdr;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   578
  CancelAllEvents ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   579
  m_listener = listener;
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   580
  m_txParams = params;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   581
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   582
  //NS_ASSERT (m_phy->IsStateIdle ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   583
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   584
  NS_LOG_DEBUG ("startTx size=" << GetSize (m_currentPacket, &m_currentHdr) <<
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   585
                ", to=" << m_currentHdr.GetAddr1 () << ", listener=" << m_listener);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   586
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   587
  if (m_txParams.MustSendRts ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   588
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   589
      SendRtsForPacket ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   590
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   591
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   592
    {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   593
     if (NeedCtsToSelf() && m_ctsToSelfSupported)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   594
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   595
          SendCtsToSelf();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   596
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   597
      else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   598
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   599
          SendDataPacket ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   600
       }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   601
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   602
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   603
  /* When this method completes, we have taken ownership of the medium. */
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   604
  NS_ASSERT (m_phy->IsStateTx ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   605
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   606
bool
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   607
MacLow::NeedCtsToSelf (void)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   608
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   609
  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   610
  return m_stationManager->NeedCtsToSelf (dataTxVector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   611
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   612
void
3899
804d92c1f7c3 constify
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   613
MacLow::ReceiveError (Ptr<const Packet> packet, double rxSnr)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   614
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   615
  NS_LOG_FUNCTION (this << packet << rxSnr);
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
   616
  NS_LOG_DEBUG ("rx failed ");
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   617
  if (m_txParams.MustWaitFastAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   618
    {
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   619
      NS_ASSERT (m_fastAckFailedTimeoutEvent.IsExpired ());
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   620
      m_fastAckFailedTimeoutEvent = Simulator::Schedule (GetSifs (),
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   621
                                                         &MacLow::FastAckFailedTimeout, this);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   622
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   623
  return;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   624
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   625
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   626
void
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   627
MacLow::NotifySwitchingStartNow (Time duration)
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   628
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   629
  NS_LOG_DEBUG ("switching channel. Cancelling MAC pending events");
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   630
  m_stationManager->Reset ();
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   631
  CancelAllEvents ();
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   632
  if (m_navCounterResetCtsMissed.IsRunning ())
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   633
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   634
      m_navCounterResetCtsMissed.Cancel ();
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   635
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   636
  m_lastNavStart = Simulator::Now ();
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   637
  m_lastNavDuration = Seconds (0);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   638
  m_currentPacket = 0;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   639
  m_listener = 0;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   640
}
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   641
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   642
void
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
   643
MacLow::ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiMode txMode, WifiPreamble preamble)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   644
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   645
  NS_LOG_FUNCTION (this << packet << rxSnr << txMode << preamble);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   646
  /* A packet is received from the PHY.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   647
   * When we have handled this packet,
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   648
   * we handle any packet present in the
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   649
   * packet queue.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   650
   */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   651
  WifiMacHeader hdr;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
   652
  packet->RemoveHeader (hdr);
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   653
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
   654
  bool isPrevNavZero = IsNavZero ();
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
   655
  NS_LOG_DEBUG ("duration/id=" << hdr.GetDuration ());
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   656
  NotifyNav (packet,hdr, txMode, preamble);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   657
  if (hdr.IsRts ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   658
    {
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
   659
      /* see section 9.2.5.7 802.11-1999
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   660
       * A STA that is addressed by an RTS frame shall transmit a CTS frame after a SIFS
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   661
       * period if the NAV at the STA receiving the RTS frame indicates that the medium is
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   662
       * idle. If the NAV at the STA receiving the RTS indicates the medium is not idle,
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
   663
       * that STA shall not respond to the RTS frame.
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
   664
       */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   665
      if (isPrevNavZero
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   666
          && hdr.GetAddr1 () == m_self)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   667
        {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
   668
          NS_LOG_DEBUG ("rx RTS from=" << hdr.GetAddr2 () << ", schedule CTS");
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   669
          NS_ASSERT (m_sendCtsEvent.IsExpired ());
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   670
          m_stationManager->ReportRxOk (hdr.GetAddr2 (), &hdr,
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   671
                                        rxSnr, txMode);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   672
          m_sendCtsEvent = Simulator::Schedule (GetSifs (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   673
                                                &MacLow::SendCtsAfterRts, this,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   674
                                                hdr.GetAddr2 (),
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   675
                                                hdr.GetDuration (),
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   676
                                                txMode,
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   677
                                                rxSnr);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   678
        }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   679
      else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   680
        {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
   681
          NS_LOG_DEBUG ("rx RTS from=" << hdr.GetAddr2 () << ", cannot schedule CTS");
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   682
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   683
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   684
  else if (hdr.IsCts ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   685
           && hdr.GetAddr1 () == m_self
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   686
           && m_ctsTimeoutEvent.IsRunning ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   687
           && m_currentPacket != 0)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   688
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   689
      NS_LOG_DEBUG ("receive cts from=" << m_currentHdr.GetAddr1 ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   690
      SnrTag tag;
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4264
diff changeset
   691
      packet->RemovePacketTag (tag);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   692
      m_stationManager->ReportRxOk (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   693
                                    rxSnr, txMode);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   694
      m_stationManager->ReportRtsOk (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   695
                                     rxSnr, txMode, tag.Get ());
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   696
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   697
      m_ctsTimeoutEvent.Cancel ();
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
   698
      NotifyCtsTimeoutResetNow ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   699
      m_listener->GotCts (rxSnr, txMode);
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   700
      NS_ASSERT (m_sendDataEvent.IsExpired ());
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   701
      m_sendDataEvent = Simulator::Schedule (GetSifs (),
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   702
                                             &MacLow::SendDataAfterCts, this,
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   703
                                             hdr.GetAddr1 (),
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   704
                                             hdr.GetDuration (),
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   705
                                             txMode);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   706
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   707
  else if (hdr.IsAck ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   708
           && hdr.GetAddr1 () == m_self
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   709
           && (m_normalAckTimeoutEvent.IsRunning ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   710
               || m_fastAckTimeoutEvent.IsRunning ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   711
               || m_superFastAckTimeoutEvent.IsRunning ())
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   712
           && m_txParams.MustWaitAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   713
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   714
      NS_LOG_DEBUG ("receive ack from=" << m_currentHdr.GetAddr1 ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   715
      SnrTag tag;
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4264
diff changeset
   716
      packet->RemovePacketTag (tag);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   717
      m_stationManager->ReportRxOk (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   718
                                    rxSnr, txMode);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   719
      m_stationManager->ReportDataOk (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   720
                                      rxSnr, txMode, tag.Get ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   721
      bool gotAck = false;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   722
      if (m_txParams.MustWaitNormalAck ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   723
          && m_normalAckTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   724
        {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   725
          m_normalAckTimeoutEvent.Cancel ();
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
   726
          NotifyAckTimeoutResetNow ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   727
          gotAck = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   728
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   729
      if (m_txParams.MustWaitFastAck ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   730
          && m_fastAckTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   731
        {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   732
          m_fastAckTimeoutEvent.Cancel ();
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
   733
          NotifyAckTimeoutResetNow ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   734
          gotAck = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   735
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   736
      if (gotAck)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   737
        {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   738
          m_listener->GotAck (rxSnr, txMode);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   739
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   740
      if (m_txParams.HasNextPacket ())
4670
98aac83e4416 coding style
Mirko Banchi <mk.banchi@gmail.com>
parents: 4556
diff changeset
   741
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   742
          m_waitSifsEvent = Simulator::Schedule (GetSifs (),
4671
a99a57f697de coding style
Mirko Banchi <mk.banchi@gmail.com>
parents: 4670
diff changeset
   743
                                                 &MacLow::WaitSifsAfterEndTx, this);
4670
98aac83e4416 coding style
Mirko Banchi <mk.banchi@gmail.com>
parents: 4556
diff changeset
   744
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   745
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   746
  else if (hdr.IsBlockAck () && hdr.GetAddr1 () == m_self
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   747
           && (m_txParams.MustWaitBasicBlockAck () || m_txParams.MustWaitCompressedBlockAck ())
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   748
           && m_blockAckTimeoutEvent.IsRunning ())
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   749
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   750
      NS_LOG_DEBUG ("got block ack from " << hdr.GetAddr2 ());
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   751
      CtrlBAckResponseHeader blockAck;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   752
      packet->RemoveHeader (blockAck);
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   753
      m_blockAckTimeoutEvent.Cancel ();
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   754
      m_listener->GotBlockAck (&blockAck, hdr.GetAddr2 ());
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   755
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   756
  else if (hdr.IsBlockAckReq () && hdr.GetAddr1 () == m_self)
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   757
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   758
      CtrlBAckRequestHeader blockAckReq;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   759
      packet->RemoveHeader (blockAckReq);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   760
      if (!blockAckReq.IsMultiTid ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   761
        {
6606
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
   762
          uint8_t tid = blockAckReq.GetTidInfo ();
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
   763
          AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), tid));
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   764
          if (it != m_bAckAgreements.end ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   765
            {
6606
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
   766
              //Update block ack cache
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
   767
              BlockAckCachesI i = m_bAckCaches.find (std::make_pair (hdr.GetAddr2 (), tid));
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
   768
              NS_ASSERT (i != m_bAckCaches.end ());
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
   769
              (*i).second.UpdateWithBlockAckReq (blockAckReq.GetStartingSequence ());
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
   770
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   771
              NS_ASSERT (m_sendAckEvent.IsExpired ());
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   772
              /* See section 11.5.3 in IEEE802.11 for mean of this timer */
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   773
              ResetBlockAckInactivityTimerIfNeeded (it->second.first);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   774
              if ((*it).second.first.IsImmediateBlockAck ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   775
                {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   776
                  NS_LOG_DEBUG ("rx blockAckRequest/sendImmediateBlockAck from=" << hdr.GetAddr2 ());
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   777
                  m_sendAckEvent = Simulator::Schedule (GetSifs (),
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   778
                                                        &MacLow::SendBlockAckAfterBlockAckRequest, this,
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   779
                                                        blockAckReq,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   780
                                                        hdr.GetAddr2 (),
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   781
                                                        hdr.GetDuration (),
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   782
                                                        txMode);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   783
                }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   784
              else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   785
                {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   786
                  NS_FATAL_ERROR ("Delayed block ack not supported.");
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   787
                }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   788
            }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   789
          else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   790
            {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   791
              NS_LOG_DEBUG ("There's not a valid agreement for this block ack request.");
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   792
            }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   793
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   794
      else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   795
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   796
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   797
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   798
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   799
  else if (hdr.IsCtl ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   800
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
   801
      NS_LOG_DEBUG ("rx drop " << hdr.GetTypeString ());
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   802
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   803
  else if (hdr.GetAddr1 () == m_self)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   804
    {
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   805
      m_stationManager->ReportRxOk (hdr.GetAddr2 (), &hdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   806
                                    rxSnr, txMode);
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   807
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   808
      if (hdr.IsQosData () && StoreMpduIfNeeded (packet, hdr))
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   809
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   810
          /* From section 9.10.4 in IEEE802.11:
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   811
             Upon the receipt of a QoS data frame from the originator for which
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   812
             the Block Ack agreement exists, the recipient shall buffer the MSDU
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   813
             regardless of the value of the Ack Policy subfield within the
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   814
             QoS Control field of the QoS data frame. */
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   815
          if (hdr.IsQosAck ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   816
            {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   817
              AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ()));
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   818
              RxCompleteBufferedPacketsWithSmallerSequence (it->second.first.GetStartingSequence (),
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   819
                                                            hdr.GetAddr2 (), hdr.GetQosTid ());
6599
8c1a255c05a3 Rename MacLow::RxCompleteBufferedPacket to a more appropriate name
Mirko Banchi <mk.banchi@gmail.com>
parents: 6595
diff changeset
   820
              RxCompleteBufferedPacketsUntilFirstLost (hdr.GetAddr2 (), hdr.GetQosTid ());
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   821
              NS_ASSERT (m_sendAckEvent.IsExpired ());
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   822
              m_sendAckEvent = Simulator::Schedule (GetSifs (),
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   823
                                                    &MacLow::SendAckAfterData, this,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   824
                                                    hdr.GetAddr2 (),
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   825
                                                    hdr.GetDuration (),
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   826
                                                    txMode,
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   827
                                                    rxSnr);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   828
            }
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   829
          else if (hdr.IsQosBlockAck ())
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   830
            {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   831
              AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ()));
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   832
              /* See section 11.5.3 in IEEE802.11 for mean of this timer */
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   833
              ResetBlockAckInactivityTimerIfNeeded (it->second.first);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   834
            }
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   835
          return;
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   836
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   837
      else if (hdr.IsQosData () && hdr.IsQosBlockAck ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   838
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   839
          /* This happens if a packet with ack policy Block Ack is received and a block ack
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   840
             agreement for that packet doesn't exist.
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   841
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   842
             From section 11.5.3 in IEEE802.11e:
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   843
             When a recipient does not have an active Block ack for a TID, but receives
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   844
             data MPDUs with the Ack Policy subfield set to Block Ack, it shall discard
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   845
             them and shall send a DELBA frame using the normal access
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   846
             mechanisms. */
6331
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6304
diff changeset
   847
          AcIndex ac = QosUtilsMapTidToAc (hdr.GetQosTid ());
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   848
          m_edcaListeners[ac]->BlockAckInactivityTimeout (hdr.GetAddr2 (), hdr.GetQosTid ());
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   849
          return;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   850
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   851
      else if (hdr.IsQosData () && hdr.IsQosNoAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   852
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   853
          NS_LOG_DEBUG ("rx unicast/noAck from=" << hdr.GetAddr2 ());
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   854
        }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   855
      else if (hdr.IsData () || hdr.IsMgt ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   856
        {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
   857
          NS_LOG_DEBUG ("rx unicast/sendAck from=" << hdr.GetAddr2 ());
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   858
          NS_ASSERT (m_sendAckEvent.IsExpired ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   859
          m_sendAckEvent = Simulator::Schedule (GetSifs (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   860
                                                &MacLow::SendAckAfterData, this,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   861
                                                hdr.GetAddr2 (),
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   862
                                                hdr.GetDuration (),
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   863
                                                txMode,
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   864
                                                rxSnr);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   865
        }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   866
      goto rxPacket;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   867
    }
4079
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
   868
  else if (hdr.GetAddr1 ().IsGroup ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   869
    {
4079
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
   870
      if (hdr.IsData () || hdr.IsMgt ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   871
        {
4079
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
   872
          NS_LOG_DEBUG ("rx group from=" << hdr.GetAddr2 ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   873
          goto rxPacket;
4079
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
   874
        }
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
   875
      else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   876
        {
4079
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
   877
          // DROP
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   878
        }
4079
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
   879
    }
7333
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   880
  else if (m_promisc)
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   881
    {
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   882
      NS_ASSERT (hdr.GetAddr1 () != m_self);
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   883
      if (hdr.IsData ())
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   884
        {
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   885
          goto rxPacket;
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   886
        }
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   887
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   888
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   889
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
   890
      //NS_LOG_DEBUG_VERBOSE ("rx not-for-me from %d", GetSource (packet));
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   891
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   892
  return;
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   893
rxPacket:
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   894
  WifiMacTrailer fcs;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
   895
  packet->RemoveTrailer (fcs);
1964
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1928
diff changeset
   896
  m_rxCallback (packet, &hdr);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   897
  return;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   898
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   899
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   900
uint32_t
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   901
MacLow::GetAckSize (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   902
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   903
  WifiMacHeader ack;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   904
  ack.SetType (WIFI_MAC_CTL_ACK);
1996
454a63cf6549 cts, rts, and ack sizes must take into account fcs padding
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1993
diff changeset
   905
  return ack.GetSize () + 4;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   906
}
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   907
uint32_t
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   908
MacLow::GetBlockAckSize (enum BlockAckType type) const
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   909
{
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   910
  WifiMacHeader hdr;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   911
  hdr.SetType (WIFI_MAC_CTL_BACKRESP);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   912
  CtrlBAckResponseHeader blockAck;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   913
  if (type == BASIC_BLOCK_ACK)
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   914
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   915
      blockAck.SetType (BASIC_BLOCK_ACK);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   916
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   917
  else if (type == COMPRESSED_BLOCK_ACK)
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   918
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   919
      blockAck.SetType (COMPRESSED_BLOCK_ACK);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   920
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   921
  else if (type == MULTI_TID_BLOCK_ACK)
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   922
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   923
      //Not implemented
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   924
      NS_ASSERT (false);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   925
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   926
  return hdr.GetSize () + blockAck.GetSerializedSize () + 4;
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   927
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   928
uint32_t
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   929
MacLow::GetRtsSize (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   930
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   931
  WifiMacHeader rts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   932
  rts.SetType (WIFI_MAC_CTL_RTS);
1996
454a63cf6549 cts, rts, and ack sizes must take into account fcs padding
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1993
diff changeset
   933
  return rts.GetSize () + 4;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   934
}
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   935
Time
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   936
MacLow::GetAckDuration (Mac48Address to, WifiTxVector dataTxVector) const
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   937
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   938
  WifiTxVector ackTxVector = GetAckTxVectorForData (to, dataTxVector.GetMode());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   939
  return GetAckDuration (ackTxVector);
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   940
}
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   941
Time
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   942
MacLow::GetAckDuration (WifiTxVector ackTxVector) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   943
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   944
  WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   945
  if (ackTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   946
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   947
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   948
    preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   949
  return m_phy->CalculateTxDuration (GetAckSize (), ackTxVector, preamble);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   950
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   951
Time
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   952
MacLow::GetBlockAckDuration (Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   953
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   954
  /*
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   955
   * For immediate BlockAck we should transmit the frame with the same WifiMode
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   956
   * as the BlockAckReq.
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   957
   *
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   958
   * from section 9.6 in IEEE802.11e:
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   959
   * The BlockAck control frame shall be sent at the same rate and modulation class as
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   960
   * the BlockAckReq frame if it is sent in response to a BlockAckReq frame.
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   961
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   962
  WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   963
  if (blockAckReqTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   964
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   965
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   966
    preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   967
  return m_phy->CalculateTxDuration (GetBlockAckSize (type), blockAckReqTxVector, preamble);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   968
}
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   969
Time
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   970
MacLow::GetCtsDuration (Mac48Address to, WifiTxVector rtsTxVector) const
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   971
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   972
  WifiTxVector ctsTxVector = GetCtsTxVectorForRts (to, rtsTxVector.GetMode());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   973
  return GetCtsDuration (ctsTxVector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   974
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   975
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   976
Time
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   977
MacLow::GetCtsDuration (WifiTxVector ctsTxVector) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   978
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   979
  WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   980
  if (ctsTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   981
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   982
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   983
    preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   984
  return m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble);
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
   985
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   986
uint32_t
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   987
MacLow::GetCtsSize (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   988
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   989
  WifiMacHeader cts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   990
  cts.SetType (WIFI_MAC_CTL_CTS);
1996
454a63cf6549 cts, rts, and ack sizes must take into account fcs padding
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1993
diff changeset
   991
  return cts.GetSize () + 4;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   992
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   993
uint32_t
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
   994
MacLow::GetSize (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   995
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   996
  WifiMacTrailer fcs;
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
   997
  return packet->GetSize () + hdr->GetSize () + fcs.GetSerializedSize ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   998
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   999
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1000
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1001
MacLow::GetCtsToSelfTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1002
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1003
  return m_stationManager->GetCtsToSelfTxVector (hdr, packet);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1004
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1005
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1006
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1007
MacLow::GetRtsTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1008
{
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1009
  Mac48Address to = hdr->GetAddr1 ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1010
  return m_stationManager->GetRtsTxVector (to, hdr, packet);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1011
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1012
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1013
MacLow::GetDataTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1014
{
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1015
  Mac48Address to = hdr->GetAddr1 ();
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1016
  WifiMacTrailer fcs;
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1017
  uint32_t size =  packet->GetSize ()+ hdr->GetSize () + fcs.GetSerializedSize ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1018
  //size is not used in anything!! will not worry about aggregation
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1019
  return m_stationManager->GetDataTxVector (to, hdr, packet, size);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1020
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1021
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1022
MacLow::GetCtsTxVector (Mac48Address to, WifiMode rtsTxMode) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1023
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1024
  return m_stationManager->GetCtsTxVector (to, rtsTxMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1025
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1026
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1027
MacLow::GetAckTxVector (Mac48Address to, WifiMode dataTxMode) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1028
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1029
  return m_stationManager->GetAckTxVector (to, dataTxMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1030
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1031
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1032
MacLow::GetBlockAckTxVector (Mac48Address to, WifiMode dataTxMode) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1033
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1034
  return m_stationManager->GetBlockAckTxVector (to, dataTxMode);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1035
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1036
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1037
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1038
MacLow::GetCtsTxVectorForRts (Mac48Address to, WifiMode rtsTxMode) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1039
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1040
  return GetCtsTxVector (to, rtsTxMode);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1041
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1042
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1043
MacLow::GetAckTxVectorForData (Mac48Address to, WifiMode dataTxMode) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1044
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1045
  return GetAckTxVector (to, dataTxMode);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1046
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1047
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1048
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1049
Time
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1050
MacLow::CalculateOverallTxTime (Ptr<const Packet> packet,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1051
                                const WifiMacHeader* hdr,
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
  1052
                                const MacLowTransmissionParameters& params) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1053
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1054
  WifiPreamble preamble;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1055
  Time txTime = Seconds (0);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1056
  if (params.MustSendRts ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1057
    {
10201
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1058
      WifiTxVector rtsTxVector = GetRtsTxVector (packet, hdr);
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1059
      //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1060
      if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1061
        {
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1062
          preamble = WIFI_PREAMBLE_HT_GF;
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1063
        }
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1064
      else if (rtsTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1065
        {
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1066
          preamble = WIFI_PREAMBLE_HT_MF;
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1067
        }
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1068
      else
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1069
        {
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1070
          preamble = WIFI_PREAMBLE_LONG;
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1071
        }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1072
      txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1073
      txTime += GetCtsDuration (hdr->GetAddr1 (), rtsTxVector);
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
  1074
      txTime += Time (GetSifs () * 2);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1075
    }
10201
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1076
  WifiTxVector dataTxVector = GetDataTxVector (packet, hdr);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1077
  //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1078
  if ( m_phy->GetGreenfield()&& m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1079
    preamble= WIFI_PREAMBLE_HT_GF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1080
  else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1081
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1082
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1083
    preamble=WIFI_PREAMBLE_LONG;
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1084
  uint32_t dataSize = GetSize (packet, hdr);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1085
  txTime += m_phy->CalculateTxDuration (dataSize, dataTxVector, preamble);
1996
454a63cf6549 cts, rts, and ack sizes must take into account fcs padding
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1993
diff changeset
  1086
  if (params.MustWaitAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1087
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1088
      txTime += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1089
      txTime += GetAckDuration (hdr->GetAddr1 (), dataTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1090
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1091
  return txTime;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1092
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1093
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1094
Time
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1095
MacLow::CalculateTransmissionTime (Ptr<const Packet> packet,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1096
                                   const WifiMacHeader* hdr,
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
  1097
                                   const MacLowTransmissionParameters& params) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1098
{
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1099
  Time txTime = CalculateOverallTxTime (packet, hdr, params);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1100
  if (params.HasNextPacket ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1101
    {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1102
      WifiTxVector dataTxVector = GetDataTxVector (packet, hdr);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1103
      WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1104
        //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1105
      if ( m_phy->GetGreenfield()&& m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1106
         preamble= WIFI_PREAMBLE_HT_GF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1107
      else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1108
        preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1109
      else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1110
        preamble=WIFI_PREAMBLE_LONG;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1111
      txTime += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1112
      txTime += m_phy->CalculateTxDuration (params.GetNextPacketSize (), dataTxVector, preamble);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1113
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1114
  return txTime;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1115
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1116
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1117
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1118
MacLow::NotifyNav (Ptr<const Packet> packet,const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble)
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1119
{
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1120
  NS_ASSERT (m_lastNavStart <= Simulator::Now ());
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1121
  Time duration = hdr.GetDuration ();
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1122
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1123
  if (hdr.IsCfpoll ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1124
      && hdr.GetAddr2 () == m_bssid)
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1125
    {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1126
      // see section 9.3.2.2 802.11-1999
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1127
      DoNavResetNow (duration);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1128
      return;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1129
    }
9894
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1130
  /// \todo We should also handle CF_END specially here
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1131
  /// but we don't for now because we do not generate them.
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
  1132
  else if (hdr.GetAddr1 () != m_self)
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1133
    {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1134
      // see section 9.2.5.4 802.11-1999
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1135
      bool navUpdated = DoNavStartNow (duration);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1136
      if (hdr.IsRts () && navUpdated)
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1137
        {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1138
          /**
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1139
           * A STA that used information from an RTS frame as the most recent basis to update its NAV setting
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1140
           * is permitted to reset its NAV if no PHY-RXSTART.indication is detected from the PHY during a
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1141
           * period with a duration of (2 * aSIFSTime) + (CTS_Time) + (2 * aSlotTime) starting at the
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1142
           * PHY-RXEND.indication corresponding to the detection of the RTS frame. The “CTS_Time” shall
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1143
           * be calculated using the length of the CTS frame and the data rate at which the RTS frame
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1144
           * used for the most recent NAV update was received.
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1145
           */
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1146
          WifiMacHeader cts;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1147
          cts.SetType (WIFI_MAC_CTL_CTS);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1148
          WifiTxVector txVector=GetRtsTxVector (packet, &hdr);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1149
          Time navCounterResetCtsMissedDelay =
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1150
            m_phy->CalculateTxDuration (cts.GetSerializedSize (), txVector, preamble) +
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
  1151
            Time (2 * GetSifs ()) + Time (2 * GetSlotTime ());
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1152
          m_navCounterResetCtsMissed = Simulator::Schedule (navCounterResetCtsMissedDelay,
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1153
                                                            &MacLow::NavCounterResetCtsMissed, this,
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1154
                                                            Simulator::Now ());
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1155
        }
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1156
    }
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1157
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1158
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1159
void
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1160
MacLow::NavCounterResetCtsMissed (Time rtsEndRxTime)
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1161
{
10216
48e0bcbc4281 Bug 1691 - RTS/CTS NAV reset prematurely
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10201
diff changeset
  1162
  if (m_phy->GetLastRxStartTime () < rtsEndRxTime)
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1163
    {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1164
      DoNavResetNow (Seconds (0.0));
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1165
    }
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1166
}
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1167
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1168
void
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1169
MacLow::DoNavResetNow (Time duration)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1170
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1171
  for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1172
    {
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1173
      (*i)->NavReset (duration);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1174
    }
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1175
  m_lastNavStart = Simulator::Now ();
4514
d7e974543905 Backed out changeset d21a2eafb84d
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4512
diff changeset
  1176
  m_lastNavStart = duration;
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1177
}
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1178
bool
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1179
MacLow::DoNavStartNow (Time duration)
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1180
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1181
  for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++)
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1182
    {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1183
      (*i)->NavStart (duration);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1184
    }
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1185
  Time newNavEnd = Simulator::Now () + duration;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1186
  Time oldNavEnd = m_lastNavStart + m_lastNavDuration;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1187
  if (newNavEnd > oldNavEnd)
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1188
    {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1189
      m_lastNavStart = Simulator::Now ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1190
      m_lastNavDuration = duration;
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1191
      return true;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1192
    }
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1193
  return false;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1194
}
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1195
void
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1196
MacLow::NotifyAckTimeoutStartNow (Time duration)
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1197
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1198
  for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++)
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1199
    {
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1200
      (*i)->AckTimeoutStart (duration);
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1201
    }
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1202
}
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1203
void
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1204
MacLow::NotifyAckTimeoutResetNow ()
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1205
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1206
  for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++)
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1207
    {
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1208
      (*i)->AckTimeoutReset ();
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1209
    }
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1210
}
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1211
void
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1212
MacLow::NotifyCtsTimeoutStartNow (Time duration)
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1213
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1214
  for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++)
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1215
    {
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1216
      (*i)->CtsTimeoutStart (duration);
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1217
    }
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1218
}
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1219
void
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1220
MacLow::NotifyCtsTimeoutResetNow ()
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1221
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1222
  for (DcfListenersCI i = m_dcfListeners.begin (); i != m_dcfListeners.end (); i++)
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1223
    {
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1224
      (*i)->CtsTimeoutReset ();
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1225
    }
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1226
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1227
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1228
void
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1229
MacLow::ForwardDown (Ptr<const Packet> packet, const WifiMacHeader* hdr,
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1230
                     WifiTxVector txVector, WifiPreamble preamble)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1231
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1232
  NS_LOG_FUNCTION (this << packet << hdr << txVector);
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1233
  NS_LOG_DEBUG ("send " << hdr->GetTypeString () <<
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1234
                ", to=" << hdr->GetAddr1 () <<
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1235
                ", size=" << packet->GetSize () <<
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1236
                ", mode=" << txVector.GetMode() <<
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1237
                ", duration=" << hdr->GetDuration () <<
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1238
                ", seq=0x" << std::hex << m_currentHdr.GetSequenceControl () << std::dec);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1239
  m_phy->SendPacket (packet, txVector.GetMode(), preamble, txVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1240
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1241
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1242
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1243
MacLow::CtsTimeout (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1244
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1245
  NS_LOG_FUNCTION (this);
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1246
  NS_LOG_DEBUG ("cts timeout");
9894
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1247
  /// \todo should check that there was no rx start before now.
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1248
  /// we should restart a new cts timeout now until the expected
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1249
  /// end of rx if there was a rx start before now.
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
  1250
  m_stationManager->ReportRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1251
  m_currentPacket = 0;
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1252
  MacLowTransmissionListener *listener = m_listener;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1253
  m_listener = 0;
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1254
  listener->MissedCts ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1255
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1256
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1257
MacLow::NormalAckTimeout (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1258
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1259
  NS_LOG_FUNCTION (this);
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1260
  NS_LOG_DEBUG ("normal ack timeout");
9894
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1261
  /// \todo should check that there was no rx start before now.
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1262
  /// we should restart a new ack timeout now until the expected
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1263
  /// end of rx if there was a rx start before now.
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
  1264
  m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1265
  MacLowTransmissionListener *listener = m_listener;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1266
  m_listener = 0;
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1267
  listener->MissedAck ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1268
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1269
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1270
MacLow::FastAckTimeout (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1271
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1272
  NS_LOG_FUNCTION (this);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
  1273
  m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1274
  MacLowTransmissionListener *listener = m_listener;
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1275
  m_listener = 0;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1276
  if (m_phy->IsStateIdle ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1277
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1278
      NS_LOG_DEBUG ("fast Ack idle missed");
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1279
      listener->MissedAck ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1280
    }
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1281
  else
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1282
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1283
      NS_LOG_DEBUG ("fast Ack ok");
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1284
    }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1285
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1286
void
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1287
MacLow::BlockAckTimeout (void)
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1288
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1289
  NS_LOG_FUNCTION (this);
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1290
  NS_LOG_DEBUG ("block ack timeout");
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1291
6068
a2127017ecb4 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6065 5964
diff changeset
  1292
  m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1293
  MacLowTransmissionListener *listener = m_listener;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1294
  m_listener = 0;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1295
  listener->MissedBlockAck ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1296
}
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1297
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1298
MacLow::SuperFastAckTimeout ()
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1299
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1300
  NS_LOG_FUNCTION (this);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
  1301
  m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1302
  MacLowTransmissionListener *listener = m_listener;
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1303
  m_listener = 0;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1304
  if (m_phy->IsStateIdle ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1305
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1306
      NS_LOG_DEBUG ("super fast Ack failed");
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1307
      listener->MissedAck ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1308
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1309
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1310
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1311
      NS_LOG_DEBUG ("super fast Ack ok");
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1312
      listener->GotAck (0.0, WifiMode ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1313
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1314
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1315
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1316
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1317
MacLow::SendRtsForPacket (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1318
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1319
  NS_LOG_FUNCTION (this);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1320
  /* send an RTS for this packet. */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1321
  WifiMacHeader rts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1322
  rts.SetType (WIFI_MAC_CTL_RTS);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1323
  rts.SetDsNotFrom ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1324
  rts.SetDsNotTo ();
3659
653395340b5c should set retry bit in rts and acks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3658
diff changeset
  1325
  rts.SetNoRetry ();
2793
10a571d9a9f7 initialize no more fragment flag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2547
diff changeset
  1326
  rts.SetNoMoreFragments ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1327
  rts.SetAddr1 (m_currentHdr.GetAddr1 ());
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
  1328
  rts.SetAddr2 (m_self);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1329
  WifiTxVector rtsTxVector = GetRtsTxVector (m_currentPacket, &m_currentHdr);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1330
  Time duration = Seconds (0);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1331
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1332
  WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1333
  //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1334
  if ( m_phy->GetGreenfield()&& m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1335
    preamble= WIFI_PREAMBLE_HT_GF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1336
  else if (rtsTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1337
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1338
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1339
    preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1340
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1341
  if (m_txParams.HasDurationId ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1342
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1343
      duration += m_txParams.GetDurationId ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1344
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1345
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1346
    {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1347
      WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1348
      duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1349
      duration += GetCtsDuration (m_currentHdr.GetAddr1 (), rtsTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1350
      duration += GetSifs ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1351
      duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr),
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1352
                                              dataTxVector, preamble);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1353
      duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1354
      duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1355
    }
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1356
  rts.SetDuration (duration);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1357
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1358
  Time txDuration = m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1359
  Time timerDelay = txDuration + GetCtsTimeout ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1360
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
  1361
  NS_ASSERT (m_ctsTimeoutEvent.IsExpired ());
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1362
  NotifyCtsTimeoutStartNow (timerDelay);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1363
  m_ctsTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::CtsTimeout, this);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1364
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1365
  Ptr<Packet> packet = Create<Packet> ();
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1366
  packet->AddHeader (rts);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1367
  WifiMacTrailer fcs;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1368
  packet->AddTrailer (fcs);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1369
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1370
  ForwardDown (packet, &rts, rtsTxVector,preamble);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1371
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1372
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1373
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1374
MacLow::StartDataTxTimers (WifiTxVector dataTxVector)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1375
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1376
  WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1377
 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1378
  //Since it is data then it can have format = GF
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1379
  if (m_phy->GetGreenfield() && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1380
    preamble= WIFI_PREAMBLE_HT_GF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1381
  else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1382
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1383
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1384
    preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1385
 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1386
  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1387
  if (m_txParams.MustWaitNormalAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1388
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1389
      Time timerDelay = txDuration + GetAckTimeout ();
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
  1390
      NS_ASSERT (m_normalAckTimeoutEvent.IsExpired ());
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1391
      NotifyAckTimeoutStartNow (timerDelay);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1392
      m_normalAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::NormalAckTimeout, this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1393
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1394
  else if (m_txParams.MustWaitFastAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1395
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1396
      Time timerDelay = txDuration + GetPifs ();
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
  1397
      NS_ASSERT (m_fastAckTimeoutEvent.IsExpired ());
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1398
      NotifyAckTimeoutStartNow (timerDelay);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1399
      m_fastAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::FastAckTimeout, this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1400
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1401
  else if (m_txParams.MustWaitSuperFastAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1402
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1403
      Time timerDelay = txDuration + GetPifs ();
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
  1404
      NS_ASSERT (m_superFastAckTimeoutEvent.IsExpired ());
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1405
      NotifyAckTimeoutStartNow (timerDelay);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1406
      m_superFastAckTimeoutEvent = Simulator::Schedule (timerDelay,
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1407
                                                        &MacLow::SuperFastAckTimeout, this);
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1408
    }
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1409
  else if (m_txParams.MustWaitBasicBlockAck ())
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1410
    {
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1411
      Time timerDelay = txDuration + GetBasicBlockAckTimeout ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1412
      NS_ASSERT (m_blockAckTimeoutEvent.IsExpired ());
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1413
      m_blockAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::BlockAckTimeout, this);
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1414
    }
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1415
  else if (m_txParams.MustWaitCompressedBlockAck ())
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1416
    {
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1417
      Time timerDelay = txDuration + GetCompressedBlockAckTimeout ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1418
      NS_ASSERT (m_blockAckTimeoutEvent.IsExpired ());
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1419
      m_blockAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::BlockAckTimeout, this);
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1420
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1421
  else if (m_txParams.HasNextPacket ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1422
    {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1423
     if (m_stationManager->HasHtSupported())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1424
       {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1425
          Time delay = txDuration + GetRifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1426
          NS_ASSERT (m_waitRifsEvent.IsExpired ());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1427
          m_waitRifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTx, this); 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1428
       }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1429
     else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1430
       {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1431
          Time delay = txDuration + GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1432
          NS_ASSERT (m_waitSifsEvent.IsExpired ());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1433
          m_waitSifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTx, this);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1434
       }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1435
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1436
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1437
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1438
      // since we do not expect any timer to be triggered.
9176
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  1439
      Simulator::Schedule(txDuration, &MacLow::EndTxNoAck, this);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1440
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1441
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1442
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1443
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1444
MacLow::SendDataPacket (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1445
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1446
  NS_LOG_FUNCTION (this);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1447
  /* send this packet directly. No RTS is needed. */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1448
  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1449
  WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1450
          
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1451
  if (m_phy->GetGreenfield() && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1452
     //In the future has to make sure that receiver has greenfield enabled
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1453
     preamble= WIFI_PREAMBLE_HT_GF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1454
  else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1455
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1456
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1457
     preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1458
  
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1459
  StartDataTxTimers (dataTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1460
2163
03fe5e8740dc fix a small style issue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2159
diff changeset
  1461
  Time duration = Seconds (0.0);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1462
  if (m_txParams.HasDurationId ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1463
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1464
      duration += m_txParams.GetDurationId ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1465
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1466
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1467
    {
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1468
      if (m_txParams.MustWaitBasicBlockAck ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1469
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1470
          duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1471
          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, BASIC_BLOCK_ACK);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1472
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1473
      else if (m_txParams.MustWaitCompressedBlockAck ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1474
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1475
          duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1476
          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, COMPRESSED_BLOCK_ACK);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1477
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1478
      else if (m_txParams.MustWaitAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1479
        {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1480
          duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1481
          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1482
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1483
      if (m_txParams.HasNextPacket ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1484
        {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1485
          duration += GetSifs ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1486
          duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1487
                                                  dataTxVector, preamble);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1488
          if (m_txParams.MustWaitAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1489
            {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1490
              duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1491
              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1492
            }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1493
        }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1494
    }
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1495
  m_currentHdr.SetDuration (duration);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1496
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1497
  m_currentPacket->AddHeader (m_currentHdr);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1498
  WifiMacTrailer fcs;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1499
  m_currentPacket->AddTrailer (fcs);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1500
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1501
  ForwardDown (m_currentPacket, &m_currentHdr, dataTxVector,preamble);
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1502
  m_currentPacket = 0;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1503
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1504
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1505
bool
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1506
MacLow::IsNavZero (void) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1507
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1508
  if (m_lastNavStart + m_lastNavDuration < Simulator::Now ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1509
    {
2172
eb1adef495b6 the bool check was inverted. reported by Federico Maguolo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2163
diff changeset
  1510
      return true;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1511
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1512
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1513
    {
2172
eb1adef495b6 the bool check was inverted. reported by Federico Maguolo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2163
diff changeset
  1514
      return false;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1515
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1516
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1517
void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1518
MacLow::SendCtsToSelf (void)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1519
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1520
  WifiMacHeader cts;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1521
  cts.SetType (WIFI_MAC_CTL_CTS);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1522
  cts.SetDsNotFrom ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1523
  cts.SetDsNotTo ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1524
  cts.SetNoMoreFragments ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1525
  cts.SetNoRetry ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1526
  cts.SetAddr1 (m_self);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1527
 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1528
  WifiTxVector ctsTxVector = GetCtsToSelfTxVector (m_currentPacket, &m_currentHdr);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1529
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1530
  WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1531
  if (ctsTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1532
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1533
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1534
    preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1535
  
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1536
  Time duration = Seconds (0);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1537
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1538
  if (m_txParams.HasDurationId ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1539
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1540
      duration += m_txParams.GetDurationId ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1541
    }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1542
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1543
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1544
      WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1545
      duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1546
      duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket,&m_currentHdr),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1547
                                              dataTxVector, preamble);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1548
      if (m_txParams.MustWaitBasicBlockAck ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1549
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1550
          
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1551
          duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1552
          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, BASIC_BLOCK_ACK);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1553
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1554
      else if (m_txParams.MustWaitCompressedBlockAck ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1555
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1556
          duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1557
          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, COMPRESSED_BLOCK_ACK);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1558
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1559
      else if (m_txParams.MustWaitAck ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1560
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1561
          duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1562
          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1563
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1564
      if (m_txParams.HasNextPacket ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1565
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1566
          duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1567
          duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1568
                                                  dataTxVector, preamble);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1569
          if (m_txParams.MustWaitCompressedBlockAck ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1570
            {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1571
              duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1572
              duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), dataTxVector, COMPRESSED_BLOCK_ACK);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1573
            }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1574
          else if (m_txParams.MustWaitAck ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1575
            {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1576
              duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1577
              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1578
            }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1579
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1580
    }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1581
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1582
  cts.SetDuration (duration);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1583
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1584
  Ptr<Packet> packet = Create<Packet> ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1585
  packet->AddHeader (cts);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1586
  WifiMacTrailer fcs;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1587
  packet->AddTrailer (fcs);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1588
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1589
  ForwardDown (packet, &cts, ctsTxVector,preamble);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1590
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1591
  Time txDuration = m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1592
  txDuration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1593
  NS_ASSERT (m_sendDataEvent.IsExpired ());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1594
  
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1595
  m_sendDataEvent = Simulator::Schedule (txDuration,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1596
                                         &MacLow::SendDataAfterCts, this,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1597
                                         cts.GetAddr1 (),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1598
                                         duration,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1599
                                         ctsTxVector.GetMode());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1600
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1601
void
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1602
MacLow::SendCtsAfterRts (Mac48Address source, Time duration, WifiMode rtsTxMode, double rtsSnr)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1603
{
3746
524b07b47f32 improve debugging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3659
diff changeset
  1604
  NS_LOG_FUNCTION (this << source << duration << rtsTxMode << rtsSnr);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1605
  /* send a CTS when you receive a RTS
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1606
   * right after SIFS.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1607
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1608
 WifiTxVector ctsTxVector = GetCtsTxVector (source, rtsTxMode);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1609
  WifiMacHeader cts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1610
  cts.SetType (WIFI_MAC_CTL_CTS);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1611
  cts.SetDsNotFrom ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1612
  cts.SetDsNotTo ();
2793
10a571d9a9f7 initialize no more fragment flag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2547
diff changeset
  1613
  cts.SetNoMoreFragments ();
3659
653395340b5c should set retry bit in rts and acks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3658
diff changeset
  1614
  cts.SetNoRetry ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1615
  cts.SetAddr1 (source);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1616
  duration -= GetCtsDuration (source, ctsTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1617
  duration -= GetSifs ();
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1618
  NS_ASSERT (duration >= MicroSeconds (0));
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1619
  cts.SetDuration (duration);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1620
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1621
  Ptr<Packet> packet = Create<Packet> ();
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1622
  packet->AddHeader (cts);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1623
  WifiMacTrailer fcs;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1624
  packet->AddTrailer (fcs);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1625
6341
375d70f07323 fixed bug 923
Quincy Tse <quincy.tse@gmail.com>
parents: 6331
diff changeset
  1626
  SnrTag tag;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1627
  tag.Set (rtsSnr);
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4264
diff changeset
  1628
  packet->AddPacketTag (tag);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1629
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1630
  WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1631
  if (ctsTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1632
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1633
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1634
    preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1635
  ForwardDown (packet, &cts, ctsTxVector,preamble);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1636
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1637
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1638
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1639
MacLow::SendDataAfterCts (Mac48Address source, Time duration, WifiMode txMode)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1640
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1641
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1642
  /* send the third step in a
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1643
   * RTS/CTS/DATA/ACK hanshake
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1644
   */
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1645
  NS_ASSERT (m_currentPacket != 0);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1646
  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1647
  
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1648
  WifiPreamble preamble;       
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1649
  if (m_phy->GetGreenfield() && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1650
     //In the future has to make sure that receiver has greenfield enabled
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1651
     preamble= WIFI_PREAMBLE_HT_GF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1652
  else if (dataTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1653
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1654
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1655
     preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1656
  
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1657
  StartDataTxTimers (dataTxVector);
2176
8a8305b75bed make sure we never set a negative duration
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2172
diff changeset
  1658
  Time newDuration = Seconds (0);
8a8305b75bed make sure we never set a negative duration
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2172
diff changeset
  1659
  newDuration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1660
  newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1661
  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr),
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1662
                                                dataTxVector, preamble);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1663
  duration -= txDuration;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1664
  duration -= GetSifs ();
2176
8a8305b75bed make sure we never set a negative duration
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2172
diff changeset
  1665
8a8305b75bed make sure we never set a negative duration
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2172
diff changeset
  1666
  duration = std::max (duration, newDuration);
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1667
  NS_ASSERT (duration >= MicroSeconds (0));
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1668
  m_currentHdr.SetDuration (duration);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1669
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1670
  m_currentPacket->AddHeader (m_currentHdr);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1671
  WifiMacTrailer fcs;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1672
  m_currentPacket->AddTrailer (fcs);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1673
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1674
  ForwardDown (m_currentPacket, &m_currentHdr, dataTxVector,preamble);
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1675
  m_currentPacket = 0;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1676
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1677
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1678
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1679
MacLow::WaitSifsAfterEndTx (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1680
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1681
  m_listener->StartNext ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1682
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1683
9176
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  1684
void 
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  1685
MacLow::EndTxNoAck (void)
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  1686
{
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  1687
  MacLowTransmissionListener *listener = m_listener;
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  1688
  m_listener = 0;
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  1689
  listener->EndTxNoAck ();
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  1690
}
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  1691
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1692
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1693
MacLow::FastAckFailedTimeout (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1694
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1695
  NS_LOG_FUNCTION (this);
2088
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1696
  MacLowTransmissionListener *listener = m_listener;
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1697
  m_listener = 0;
a651a0131bfe make sure that m_listener is not reset to zero _after_ calling a user-provided callback. This allows the user-provided callback to set the m_listener member to a new value if it wants to start a new transmission
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
  1698
  listener->MissedAck ();
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1699
  NS_LOG_DEBUG ("fast Ack busy but missed");
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1700
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1701
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1702
void
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1703
MacLow::SendAckAfterData (Mac48Address source, Time duration, WifiMode dataTxMode, double dataSnr)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1704
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1705
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1706
  /* send an ACK when you receive
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1707
   * a packet after SIFS.
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1708
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1709
  WifiTxVector ackTxVector = GetAckTxVector (source, dataTxMode);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1710
  WifiMacHeader ack;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1711
  ack.SetType (WIFI_MAC_CTL_ACK);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1712
  ack.SetDsNotFrom ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1713
  ack.SetDsNotTo ();
3658
f44b66348690 should set retry bit in acks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3601
diff changeset
  1714
  ack.SetNoRetry ();
2793
10a571d9a9f7 initialize no more fragment flag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2547
diff changeset
  1715
  ack.SetNoMoreFragments ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1716
  ack.SetAddr1 (source);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1717
  duration -= GetAckDuration (ackTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1718
  duration -= GetSifs ();
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1719
  NS_ASSERT (duration >= MicroSeconds (0));
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1720
  ack.SetDuration (duration);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1721
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1722
  Ptr<Packet> packet = Create<Packet> ();
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1723
  packet->AddHeader (ack);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1724
  WifiMacTrailer fcs;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1725
  packet->AddTrailer (fcs);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1726
6341
375d70f07323 fixed bug 923
Quincy Tse <quincy.tse@gmail.com>
parents: 6331
diff changeset
  1727
  SnrTag tag;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1728
  tag.Set (dataSnr);
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4264
diff changeset
  1729
  packet->AddPacketTag (tag);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1730
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1731
   //since ACK is a control response it can't have Fomat =GF
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1732
  WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1733
  if (ackTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1734
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1735
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1736
    preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1737
  ForwardDown (packet, &ack, ackTxVector, preamble);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1738
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1739
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1740
bool
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1741
MacLow::StoreMpduIfNeeded (Ptr<Packet> packet, WifiMacHeader hdr)
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1742
{
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1743
  AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ()));
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1744
  if (it != m_bAckAgreements.end ())
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1745
    {
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1746
      WifiMacTrailer fcs;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1747
      packet->RemoveTrailer (fcs);
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1748
      BufferedPacket bufferedPacket (packet, hdr);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1749
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1750
      uint16_t endSequence = ((*it).second.first.GetStartingSequence () + 2047) % 4096;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1751
      uint16_t mappedSeqControl = QosUtilsMapSeqControlToUniqueInteger (hdr.GetSequenceControl (), endSequence);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1752
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1753
      BufferedPacketI i = (*it).second.second.begin ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1754
      for (; i != (*it).second.second.end ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1755
           && QosUtilsMapSeqControlToUniqueInteger ((*i).second.GetSequenceControl (), endSequence) < mappedSeqControl; i++)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1756
        {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1757
          ;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1758
        }
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1759
      (*it).second.second.insert (i, bufferedPacket);
6606
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1760
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1761
      //Update block ack cache
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1762
      BlockAckCachesI j = m_bAckCaches.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ()));
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1763
      NS_ASSERT (j != m_bAckCaches.end ());
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1764
      (*j).second.UpdateWithMpdu (&hdr);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1765
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1766
      return true;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1767
    }
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1768
  return false;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1769
}
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1770
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1771
void
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1772
MacLow::CreateBlockAckAgreement (const MgtAddBaResponseHeader *respHdr, Mac48Address originator,
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1773
                                 uint16_t startingSeq)
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1774
{
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1775
  uint8_t tid = respHdr->GetTid ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1776
  BlockAckAgreement agreement (originator, tid);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1777
  if (respHdr->IsImmediateBlockAck ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1778
    {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1779
      agreement.SetImmediateBlockAck ();
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1780
    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1781
  else
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1782
    {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1783
      agreement.SetDelayedBlockAck ();
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1784
    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1785
  agreement.SetAmsduSupport (respHdr->IsAmsduSupported ());
6592
6ef5141e7bcf Packets that cannot be acknowledged in the block ack bitmap must not be transmitted
Mirko Banchi <mk.banchi@gmail.com>
parents: 6488
diff changeset
  1786
  agreement.SetBufferSize (respHdr->GetBufferSize () + 1);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1787
  agreement.SetTimeout (respHdr->GetTimeout ());
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1788
  agreement.SetStartingSequence (startingSeq);
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1789
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1790
  std::list<BufferedPacket> buffer (0);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1791
  AgreementKey key (originator, respHdr->GetTid ());
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1792
  AgreementValue value (agreement, buffer);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1793
  m_bAckAgreements.insert (std::make_pair (key, value));
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1794
6606
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1795
  BlockAckCache cache;
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1796
  cache.Init (startingSeq, respHdr->GetBufferSize () + 1);
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1797
  m_bAckCaches.insert (std::make_pair (key, cache));
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1798
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1799
  if (respHdr->GetTimeout () != 0)
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1800
    {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1801
      AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, respHdr->GetTid ()));
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1802
      Time timeout = MicroSeconds (1024 * agreement.GetTimeout ());
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1803
6331
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6304
diff changeset
  1804
      AcIndex ac = QosUtilsMapTidToAc (agreement.GetTid ());
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1805
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1806
      it->second.first.m_inactivityEvent = Simulator::Schedule (timeout,
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1807
                                                                &MacLowBlockAckEventListener::BlockAckInactivityTimeout,
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1808
                                                                m_edcaListeners[ac],
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1809
                                                                originator, tid);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1810
    }
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1811
}
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1812
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1813
void
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1814
MacLow::DestroyBlockAckAgreement (Mac48Address originator, uint8_t tid)
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1815
{
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1816
  AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid));
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1817
  if (it != m_bAckAgreements.end ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1818
    {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1819
      RxCompleteBufferedPacketsWithSmallerSequence (it->second.first.GetStartingSequence (), originator, tid);
6599
8c1a255c05a3 Rename MacLow::RxCompleteBufferedPacket to a more appropriate name
Mirko Banchi <mk.banchi@gmail.com>
parents: 6595
diff changeset
  1820
      RxCompleteBufferedPacketsUntilFirstLost (originator, tid);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1821
      m_bAckAgreements.erase (it);
6606
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1822
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1823
      BlockAckCachesI i = m_bAckCaches.find (std::make_pair (originator, tid));
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1824
      NS_ASSERT (i != m_bAckCaches.end ());
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  1825
      m_bAckCaches.erase (i);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1826
    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1827
}
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1828
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1829
void
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1830
MacLow::RxCompleteBufferedPacketsWithSmallerSequence (uint16_t seq, Mac48Address originator, uint8_t tid)
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1831
{
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1832
  AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid));
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1833
  if (it != m_bAckAgreements.end ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1834
    {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1835
      uint16_t endSequence = ((*it).second.first.GetStartingSequence () + 2047) % 4096;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1836
      uint16_t mappedStart = QosUtilsMapSeqControlToUniqueInteger (seq, endSequence);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1837
      uint16_t guard = (*it).second.second.begin ()->second.GetSequenceControl () & 0xfff0;
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1838
      BufferedPacketI last = (*it).second.second.begin ();
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1839
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1840
      BufferedPacketI i = (*it).second.second.begin ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1841
      for (; i != (*it).second.second.end ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1842
           && QosUtilsMapSeqControlToUniqueInteger ((*i).second.GetSequenceNumber (), endSequence) < mappedStart;)
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1843
        {
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1844
          if (guard == (*i).second.GetSequenceControl ())
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1845
            {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1846
              if (!(*i).second.IsMoreFragments ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1847
                {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1848
                  while (last != i)
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1849
                    {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1850
                      m_rxCallback ((*last).first, &(*last).second);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1851
                      last++;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1852
                    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1853
                  m_rxCallback ((*last).first, &(*last).second);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1854
                  last++;
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1855
                  /* go to next packet */
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1856
                  while (i != (*it).second.second.end () && ((guard >> 4) & 0x0fff) == (*i).second.GetSequenceNumber ())
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1857
                    {
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1858
                      i++;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1859
                    }
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1860
                  if (i != (*it).second.second.end ())
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1861
                    {
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1862
                      guard = (*i).second.GetSequenceControl () & 0xfff0;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1863
                      last = i;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1864
                    }
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1865
                }
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1866
              else
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1867
                {
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1868
                  guard++;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1869
                }
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1870
            }
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1871
          else
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1872
            {
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1873
              /* go to next packet */
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1874
              while (i != (*it).second.second.end () && ((guard >> 4) & 0x0fff) == (*i).second.GetSequenceNumber ())
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1875
                {
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1876
                  i++;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1877
                }
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1878
              if (i != (*it).second.second.end ())
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1879
                {
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1880
                  guard = (*i).second.GetSequenceControl () & 0xfff0;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1881
                  last = i;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  1882
                }
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1883
            }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1884
        }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1885
      (*it).second.second.erase ((*it).second.second.begin (), i);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1886
    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1887
}
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1888
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1889
void
6599
8c1a255c05a3 Rename MacLow::RxCompleteBufferedPacket to a more appropriate name
Mirko Banchi <mk.banchi@gmail.com>
parents: 6595
diff changeset
  1890
MacLow::RxCompleteBufferedPacketsUntilFirstLost (Mac48Address originator, uint8_t tid)
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1891
{
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1892
  AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid));
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1893
  if (it != m_bAckAgreements.end ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1894
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1895
      uint16_t startingSeqCtrl = ((*it).second.first.GetStartingSequence () << 4) & 0xfff0;
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1896
      uint16_t guard = startingSeqCtrl;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1897
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1898
      BufferedPacketI lastComplete = (*it).second.second.begin ();
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1899
      BufferedPacketI i = (*it).second.second.begin ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1900
      for (; i != (*it).second.second.end () && guard == (*i).second.GetSequenceControl (); i++)
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1901
        {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1902
          if (!(*i).second.IsMoreFragments ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1903
            {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1904
              while (lastComplete != i)
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1905
                {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1906
                  m_rxCallback ((*lastComplete).first, &(*lastComplete).second);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1907
                  lastComplete++;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1908
                }
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1909
              m_rxCallback ((*lastComplete).first, &(*lastComplete).second);
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1910
              lastComplete++;
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1911
            }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1912
          guard = (*i).second.IsMoreFragments () ? (guard + 1) : ((guard + 16) & 0xfff0);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1913
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1914
      (*it).second.first.SetStartingSequence ((guard >> 4) & 0x0fff);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1915
      /* All packets already forwarded to WifiMac must be removed from buffer:
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1916
      [begin (), lastComplete) */
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1917
      (*it).second.second.erase ((*it).second.second.begin (), lastComplete);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1918
    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1919
}
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  1920
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1921
void
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1922
MacLow::SendBlockAckResponse (const CtrlBAckResponseHeader* blockAck, Mac48Address originator, bool immediate,
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1923
                              Time duration, WifiMode blockAckReqTxMode)
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1924
{
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1925
  Ptr<Packet> packet = Create<Packet> ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1926
  packet->AddHeader (*blockAck);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1927
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1928
  WifiMacHeader hdr;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1929
  hdr.SetType (WIFI_MAC_CTL_BACKRESP);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1930
  hdr.SetAddr1 (originator);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1931
  hdr.SetAddr2 (GetAddress ());
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1932
  hdr.SetDsNotFrom ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1933
  hdr.SetDsNotTo ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1934
  hdr.SetNoRetry ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1935
  hdr.SetNoMoreFragments ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1936
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1937
  WifiTxVector blockAckTxVector = GetBlockAckTxVector (originator, blockAckReqTxMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1938
  WifiTxVector blockAckReqTxVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1939
  blockAckReqTxVector.SetMode(blockAckReqTxMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1940
  blockAckReqTxVector.SetNss(1);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1941
  blockAckReqTxVector.SetStbc(false);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1942
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1943
  m_currentPacket = packet;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1944
  m_currentHdr = hdr;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1945
  if (immediate)
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1946
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1947
      m_txParams.DisableAck ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1948
      duration -= GetSifs ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1949
      if (blockAck->IsBasic ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1950
        {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1951
          duration -= GetBlockAckDuration (originator, blockAckReqTxVector, BASIC_BLOCK_ACK);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1952
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1953
      else if (blockAck->IsCompressed ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1954
        {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1955
          duration -= GetBlockAckDuration (originator, blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1956
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1957
      else if (blockAck->IsMultiTid ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1958
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1959
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1960
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1961
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1962
  else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1963
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1964
      m_txParams.EnableAck ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1965
      duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1966
      duration += GetAckDuration (originator, blockAckReqTxVector);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1967
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1968
  m_txParams.DisableNextData ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1969
9238
e6c89f14f09b Prevent EndTxNoAck after sending a Block ACK response
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9234
diff changeset
  1970
  if (!immediate)
e6c89f14f09b Prevent EndTxNoAck after sending a Block ACK response
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9234
diff changeset
  1971
    {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1972
      StartDataTxTimers (blockAckTxVector);
9238
e6c89f14f09b Prevent EndTxNoAck after sending a Block ACK response
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9234
diff changeset
  1973
    }
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1974
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1975
  NS_ASSERT (duration >= MicroSeconds (0));
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1976
  hdr.SetDuration (duration);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1977
  //here should be present a control about immediate or delayed block ack
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1978
  //for now we assume immediate
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1979
  packet->AddHeader (hdr);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1980
  WifiMacTrailer fcs;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1981
  packet->AddTrailer (fcs);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1982
   WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1983
  if (blockAckTxVector.GetMode().GetModulationClass () == WIFI_MOD_CLASS_HT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1984
    preamble= WIFI_PREAMBLE_HT_MF;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1985
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1986
    preamble=WIFI_PREAMBLE_LONG;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1987
  ForwardDown (packet, &hdr, blockAckTxVector,preamble);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1988
  m_currentPacket = 0;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1989
}
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1990
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1991
void
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1992
MacLow::SendBlockAckAfterBlockAckRequest (const CtrlBAckRequestHeader reqHdr, Mac48Address originator,
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1993
                                          Time duration, WifiMode blockAckReqTxMode)
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1994
{
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1995
  NS_LOG_FUNCTION (this);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1996
  CtrlBAckResponseHeader blockAck;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1997
  uint8_t tid;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1998
  bool immediate = false;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1999
  if (!reqHdr.IsMultiTid ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2000
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2001
      tid = reqHdr.GetTidInfo ();
6606
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2002
      AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid));
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2003
      if (it != m_bAckAgreements.end ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2004
        {
6606
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2005
          blockAck.SetStartingSequence (reqHdr.GetStartingSequence ());
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2006
          blockAck.SetTidInfo (tid);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2007
          immediate = (*it).second.first.IsImmediateBlockAck ();
6606
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2008
          if (reqHdr.IsBasic ())
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2009
            {
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2010
              blockAck.SetType (BASIC_BLOCK_ACK);
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2011
            }
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2012
          else if (reqHdr.IsCompressed ())
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2013
            {
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2014
              blockAck.SetType (COMPRESSED_BLOCK_ACK);
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2015
            }
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2016
          BlockAckCachesI i = m_bAckCaches.find (std::make_pair (originator, tid));
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2017
          NS_ASSERT (i != m_bAckCaches.end ());
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2018
          (*i).second.FillBlockAckBitmap (&blockAck);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2019
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2020
          /* All packets with smaller sequence than starting sequence control must be passed up to Wifimac
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2021
           * See 9.10.3 in IEEE8022.11e standard.
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2022
           */
6606
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2023
          RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequence (), originator, tid);
2f2b67218332 Bug 981: use a cache to keep track of received MPDUs under block ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6599
diff changeset
  2024
          RxCompleteBufferedPacketsUntilFirstLost (originator, tid);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2025
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2026
      else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2027
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2028
          NS_LOG_DEBUG ("there's not a valid block ack agreement with " << originator);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2029
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2030
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2031
  else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2032
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2033
      NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2034
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2035
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2036
  SendBlockAckResponse (&blockAck, originator, immediate, duration, blockAckReqTxMode);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2037
}
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2038
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2039
void
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2040
MacLow::ResetBlockAckInactivityTimerIfNeeded (BlockAckAgreement &agreement)
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2041
{
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2042
  if (agreement.GetTimeout () != 0)
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2043
    {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2044
      NS_ASSERT (agreement.m_inactivityEvent.IsRunning ());
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2045
      agreement.m_inactivityEvent.Cancel ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2046
      Time timeout = MicroSeconds (1024 * agreement.GetTimeout ());
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2047
6331
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6304
diff changeset
  2048
      AcIndex ac = QosUtilsMapTidToAc (agreement.GetTid ());
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6304
diff changeset
  2049
      //std::map<AcIndex, MacLowTransmissionListener*>::iterator it = m_edcaListeners.find (ac);
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2050
      //NS_ASSERT (it != m_edcaListeners.end ());
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2051
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2052
      agreement.m_inactivityEvent = Simulator::Schedule (timeout,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2053
                                                         &MacLowBlockAckEventListener::BlockAckInactivityTimeout,
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2054
                                                         m_edcaListeners[ac],
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2055
                                                         agreement.GetPeer (),
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2056
                                                         agreement.GetTid ());
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2057
    }
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2058
}
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2059
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2060
void
6331
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6304
diff changeset
  2061
MacLow::RegisterBlockAckListenerForAc (enum AcIndex ac, MacLowBlockAckEventListener *listener)
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2062
{
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2063
  m_edcaListeners.insert (std::make_pair (ac, listener));
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2064
}
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2065
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2066
} // namespace ns3