src/wifi/model/mac-low.cc
author Tom Henderson <tomh@tomh.org>
Mon, 28 Sep 2015 20:27:25 -0700
changeset 11676 05ea1489e509
parent 11628 243b71de25a0
permissions -rw-r--r--
bug 2184: Integer overflow in MacLow
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
 *
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
    19
 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
    20
 *          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
#include "mac-low.h"
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
#include "wifi-phy.h"
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
#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
    33
#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
    34
#include "edca-txop-n.h"
9234
310d371059d5 Bug 1566 - WiFi SNR tag improvements
Konstantinos Katsaros <dinos.katsaros@gmail.com>
parents: 9176
diff changeset
    35
#include "snr-tag.h"
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    36
#include "yans-wifi-phy.h"
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    37
#include "ampdu-tag.h"
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    38
#include "wifi-mac-queue.h"
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
    39
#include "mpdu-standard-aggregator.h"
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
    41
#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
    42
#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
    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
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10883
diff changeset
    46
NS_LOG_COMPONENT_DEFINE ("MacLow");
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10883
diff changeset
    47
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
MacLowTransmissionListener::MacLowTransmissionListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    49
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    50
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
MacLowTransmissionListener::~MacLowTransmissionListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    52
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    53
}
5955
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    54
void
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    55
MacLowTransmissionListener::GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source, WifiMode mode)
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    56
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    57
}
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
    58
void
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
    59
MacLowTransmissionListener::MissedBlockAck (void)
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    60
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    61
}
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
    62
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
    63
MacLowDcfListener::MacLowDcfListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    64
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    65
}
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
    66
MacLowDcfListener::~MacLowDcfListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    67
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    68
}
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
    69
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
    70
MacLowAggregationCapableTransmissionListener::MacLowAggregationCapableTransmissionListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    71
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    72
}
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
    73
MacLowAggregationCapableTransmissionListener::~MacLowAggregationCapableTransmissionListener ()
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    74
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
    75
}
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
    76
void MacLowAggregationCapableTransmissionListener::SetAmpdu (bool ampdu)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    77
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    78
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
    79
void MacLowAggregationCapableTransmissionListener::CompleteTransfer (Mac48Address address, uint8_t tid)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    80
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    81
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    82
void
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
    83
MacLowAggregationCapableTransmissionListener::CompleteMpduTx (Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    84
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    85
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
    86
uint16_t
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
    87
MacLowAggregationCapableTransmissionListener::GetNextSequenceNumberfor (WifiMacHeader *hdr)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    88
{
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
    89
  return 0;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    90
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
    91
uint16_t
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
    92
MacLowAggregationCapableTransmissionListener::PeekNextSequenceNumberfor (WifiMacHeader *hdr)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    93
{
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
    94
  return 0;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    95
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
    96
Ptr<const Packet>
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
    97
MacLowAggregationCapableTransmissionListener::PeekNextPacketInBaQueue (WifiMacHeader &header, Mac48Address recipient, uint8_t tid, Time *timestamp)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    98
{
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
    99
  return 0;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   100
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   101
void
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   102
MacLowAggregationCapableTransmissionListener::RemoveFromBaQueue (uint8_t tid, Mac48Address recipient, uint16_t seqnumber)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   103
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   104
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   105
uint32_t
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   106
MacLowAggregationCapableTransmissionListener::GetNOutstandingPackets (Mac48Address recipient, uint8_t tid)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   107
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   108
  return 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   109
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   110
uint32_t
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   111
MacLowAggregationCapableTransmissionListener::GetNRetryNeededPackets (Mac48Address recipient, uint8_t tid) const
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   112
{
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   113
  return 0;
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   114
}
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   115
Ptr<MsduAggregator>
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   116
MacLowAggregationCapableTransmissionListener::GetMsduAggregator (void) const
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   117
{
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   118
  return 0;
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   119
}
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   120
Mac48Address
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   121
MacLowAggregationCapableTransmissionListener::GetSrcAddressForAggregation (const WifiMacHeader &hdr)
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   122
{
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   123
  return 0;
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   124
}
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   125
Mac48Address
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
   126
MacLowAggregationCapableTransmissionListener::GetDestAddressForAggregation (const WifiMacHeader &hdr)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   127
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   128
  return 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   129
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   130
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
MacLowTransmissionParameters::MacLowTransmissionParameters ()
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
  : m_nextSize (0),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
    m_waitAck (ACK_NONE),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
    m_sendRts (false),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
    m_overrideDurationId (Seconds (0))
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   136
{
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   137
}
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   138
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
MacLowTransmissionParameters::EnableNextData (uint32_t size)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
  m_nextSize = size;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   143
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
MacLowTransmissionParameters::DisableNextData (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
  m_nextSize = 0;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   148
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
MacLowTransmissionParameters::EnableOverrideDurationId (Time durationId)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
  m_overrideDurationId = durationId;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   153
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
MacLowTransmissionParameters::DisableOverrideDurationId (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   155
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
  m_overrideDurationId = Seconds (0);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   158
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
MacLowTransmissionParameters::EnableSuperFastAck (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
  m_waitAck = ACK_SUPER_FAST;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
}
5954
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   163
void
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   164
MacLowTransmissionParameters::EnableBasicBlockAck (void)
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   165
{
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   166
  m_waitAck = BLOCK_ACK_BASIC;
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   167
}
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   168
void
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   169
MacLowTransmissionParameters::EnableCompressedBlockAck (void)
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   170
{
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   171
  m_waitAck = BLOCK_ACK_COMPRESSED;
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   172
}
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   173
void
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   174
MacLowTransmissionParameters::EnableMultiTidBlockAck (void)
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   175
{
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   176
  m_waitAck = BLOCK_ACK_MULTI_TID;
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   177
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   178
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
MacLowTransmissionParameters::EnableFastAck (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   180
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   181
  m_waitAck = ACK_FAST;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   183
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   184
MacLowTransmissionParameters::EnableAck (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   185
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
  m_waitAck = ACK_NORMAL;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   188
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
MacLowTransmissionParameters::DisableAck (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
  m_waitAck = ACK_NONE;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   193
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
MacLowTransmissionParameters::EnableRts (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
  m_sendRts = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   198
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   199
MacLowTransmissionParameters::DisableRts (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   201
  m_sendRts = false;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   203
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
MacLowTransmissionParameters::MustWaitAck (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   205
{
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
   206
  return (m_waitAck != ACK_NONE);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   208
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
MacLowTransmissionParameters::MustWaitNormalAck (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   210
{
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
   211
  return (m_waitAck == ACK_NORMAL);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   213
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   214
MacLowTransmissionParameters::MustWaitFastAck (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
{
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
   216
  return (m_waitAck == ACK_FAST);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
}
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   218
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
MacLowTransmissionParameters::MustWaitSuperFastAck (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
{
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
   221
  return (m_waitAck == ACK_SUPER_FAST);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
}
5954
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   223
bool
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   224
MacLowTransmissionParameters::MustWaitBasicBlockAck (void) const
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   225
{
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   226
  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
   227
}
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   228
bool
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   229
MacLowTransmissionParameters::MustWaitCompressedBlockAck (void) const
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   230
{
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   231
  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
   232
}
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   233
bool
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   234
MacLowTransmissionParameters::MustWaitMultiTidBlockAck (void) const
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5846
diff changeset
   235
{
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   236
  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
   237
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   238
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
MacLowTransmissionParameters::MustSendRts (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
  return m_sendRts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   242
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   243
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
MacLowTransmissionParameters::HasDurationId (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
{
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
   246
  return (m_overrideDurationId != Seconds (0));
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
Time
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
MacLowTransmissionParameters::GetDurationId (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
{
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   251
  NS_ASSERT (m_overrideDurationId != Seconds (0));
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   252
  return m_overrideDurationId;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   254
bool
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
MacLowTransmissionParameters::HasNextPacket (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
{
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
   257
  return (m_nextSize != 0);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   259
uint32_t
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
MacLowTransmissionParameters::GetNextPacketSize (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
{
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   262
  NS_ASSERT (HasNextPacket ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
  return m_nextSize;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   266
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
   267
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   268
  os << "["
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   269
     << "send rts=" << params.m_sendRts << ", "
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   270
     << "next size=" << params.m_nextSize << ", "
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   271
     << "dur=" << params.m_overrideDurationId << ", "
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   272
     << "ack=";
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   273
  switch (params.m_waitAck)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   274
    {
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   275
    case MacLowTransmissionParameters::ACK_NONE:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   276
      os << "none";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   277
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   278
    case MacLowTransmissionParameters::ACK_NORMAL:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   279
      os << "normal";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   280
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   281
    case MacLowTransmissionParameters::ACK_FAST:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   282
      os << "fast";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   283
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   284
    case MacLowTransmissionParameters::ACK_SUPER_FAST:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   285
      os << "super-fast";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   286
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   287
    case MacLowTransmissionParameters::BLOCK_ACK_BASIC:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   288
      os << "basic-block-ack";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   289
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   290
    case MacLowTransmissionParameters::BLOCK_ACK_COMPRESSED:
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   291
      os << "compressed-block-ack";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   292
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   293
    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
   294
      os << "multi-tid-block-ack";
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   295
      break;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   296
    }
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   297
  os << "]";
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   298
  return os;
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   299
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   301
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   302
/**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   303
 * Listener for PHY events. Forwards to MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   304
 */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   305
class PhyMacLowListener : public ns3::WifiPhyListener
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   306
{
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   307
public:
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   308
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   309
   * Create a PhyMacLowListener for the given MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   310
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   311
   * \param macLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   312
   */
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   313
  PhyMacLowListener (ns3::MacLow *macLow)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   314
    : m_macLow (macLow)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   315
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   316
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   317
  virtual ~PhyMacLowListener ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   318
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   319
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   320
  virtual void NotifyRxStart (Time duration)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   321
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   322
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   323
  virtual void NotifyRxEndOk (void)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   324
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   325
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   326
  virtual void NotifyRxEndError (void)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   327
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   328
  }
10883
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   329
  virtual void NotifyTxStart (Time duration, double txPowerDbm)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   330
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   331
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   332
  virtual void NotifyMaybeCcaBusyStart (Time duration)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   333
  {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   334
  }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   335
  virtual void NotifySwitchingStart (Time duration)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   336
  {
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   337
    m_macLow->NotifySwitchingStartNow (duration);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   338
  }
10883
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   339
  virtual void NotifySleep (void)
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   340
  {
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   341
    m_macLow->NotifySleepNow ();
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   342
  }
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   343
  virtual void NotifyWakeup (void)
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   344
  {
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   345
  }
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   346
private:
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   347
  ns3::MacLow *m_macLow;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   348
};
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   349
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   350
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
MacLow::MacLow ()
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
  : m_normalAckTimeoutEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   353
    m_fastAckTimeoutEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
    m_superFastAckTimeoutEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   355
    m_fastAckFailedTimeoutEvent (),
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   356
    m_blockAckTimeoutEvent (),
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   357
    m_ctsTimeoutEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   358
    m_sendCtsEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   359
    m_sendAckEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   360
    m_sendDataEvent (),
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   361
    m_waitSifsEvent (),
9176
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   362
    m_endTxNoAckEvent (),
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   363
    m_mpduAggregator (0),
2286
3704959cf153 ensure m_listener is initialized properly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
   364
    m_currentPacket (0),
10459
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10216
diff changeset
   365
    m_listener (0),
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10216
diff changeset
   366
    m_phyMacLowListener (0),
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   367
    m_ctsToSelfSupported (false),
11479
a3dcf66928f3 add support for HT MCS and A-MPDU in radiotap headers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   368
    m_receivedAtLeastOneMpdu (false),
a3dcf66928f3 add support for HT MCS and A-MPDU in radiotap headers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   369
    m_mpduReferenceNumber (0)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   370
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   371
  NS_LOG_FUNCTION (this);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   372
  m_lastNavDuration = Seconds (0);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
  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
   374
  m_promisc = false;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   375
  m_ampdu = false;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   376
  m_sentMpdus = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   377
  m_aggregateQueue = CreateObject<WifiMacQueue> ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   378
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   379
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   380
MacLow::~MacLow ()
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   381
{
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   382
  NS_LOG_FUNCTION (this);
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   383
}
2530
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   384
11432
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   385
/* static */
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   386
TypeId
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   387
MacLow::GetTypeId (void)
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   388
{
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   389
  static TypeId tid = TypeId ("ns3::MacLow")
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   390
    .SetParent<Object> ()
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   391
    .SetGroupName ("Wifi")
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   392
    .AddConstructor<MacLow> ()
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   393
  ;
11432
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   394
  return tid;
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   395
}
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11420
diff changeset
   396
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   397
void
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   398
MacLow::SetupPhyMacLowListener (Ptr<WifiPhy> phy)
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   399
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   400
  m_phyMacLowListener = new PhyMacLowListener (this);
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   401
  phy->RegisterListener (m_phyMacLowListener);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   402
}
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   403
11159
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   404
void
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   405
MacLow::RemovePhyMacLowListener (Ptr<WifiPhy> phy)
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   406
{
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   407
  if (m_phyMacLowListener != 0 )
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   408
    {
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   409
      phy->UnregisterListener (m_phyMacLowListener);
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   410
      delete m_phyMacLowListener;
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   411
      m_phyMacLowListener = 0;
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   412
    }
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   413
}
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   414
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   415
void
2530
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   416
MacLow::DoDispose (void)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   417
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   418
  NS_LOG_FUNCTION (this);
5846
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   419
  m_normalAckTimeoutEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   420
  m_fastAckTimeoutEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   421
  m_superFastAckTimeoutEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   422
  m_fastAckFailedTimeoutEvent.Cancel ();
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   423
  m_blockAckTimeoutEvent.Cancel ();
5846
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   424
  m_ctsTimeoutEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   425
  m_sendCtsEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   426
  m_sendAckEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   427
  m_sendDataEvent.Cancel ();
f7a4e1b3f632 Bug 381: Wifi crashes on shutdown
fmoatamr
parents: 5819
diff changeset
   428
  m_waitSifsEvent.Cancel ();
9176
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   429
  m_endTxNoAckEvent.Cancel ();
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   430
  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
   431
  m_phy = 0;
2530
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   432
  m_stationManager = 0;
10459
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10216
diff changeset
   433
  if (m_phyMacLowListener != 0)
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10216
diff changeset
   434
    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   435
      delete m_phyMacLowListener;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   436
      m_phyMacLowListener = 0;
10459
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10216
diff changeset
   437
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   438
  m_mpduAggregator = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   439
  m_sentMpdus = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   440
  m_aggregateQueue = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   441
  m_ampdu = false;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   442
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   443
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   444
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   445
MacLow::CancelAllEvents (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   446
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   447
  NS_LOG_FUNCTION (this);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   448
  bool oneRunning = false;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   449
  if (m_normalAckTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   450
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   451
      m_normalAckTimeoutEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   452
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   453
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   454
  if (m_fastAckTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   455
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   456
      m_fastAckTimeoutEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   457
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   458
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   459
  if (m_superFastAckTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   460
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   461
      m_superFastAckTimeoutEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   462
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   463
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   464
  if (m_fastAckFailedTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   465
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   466
      m_fastAckFailedTimeoutEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   467
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   468
    }
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   469
  if (m_blockAckTimeoutEvent.IsRunning ())
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   470
    {
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   471
      m_blockAckTimeoutEvent.Cancel ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   472
      oneRunning = true;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   473
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   474
  if (m_ctsTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   475
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   476
      m_ctsTimeoutEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   477
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   478
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   479
  if (m_sendCtsEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   480
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   481
      m_sendCtsEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   482
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   483
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   484
  if (m_sendAckEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   485
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   486
      m_sendAckEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   487
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   488
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   489
  if (m_sendDataEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   490
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   491
      m_sendDataEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   492
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   493
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   494
  if (m_waitSifsEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   495
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   496
      m_waitSifsEvent.Cancel ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   497
      oneRunning = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   498
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   499
  if (m_waitRifsEvent.IsRunning ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   500
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   501
      m_waitRifsEvent.Cancel ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   502
      oneRunning = true;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   503
    }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   504
  if (m_endTxNoAckEvent.IsRunning ())
9176
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   505
    {
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   506
      m_endTxNoAckEvent.Cancel ();
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   507
      oneRunning = true;
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   508
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   509
  if (oneRunning && m_listener != 0)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   510
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   511
      m_listener->Cancel ();
2286
3704959cf153 ensure m_listener is initialized properly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
   512
      m_listener = 0;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   513
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   514
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   515
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   516
void
2054
ba8e810bae4c derive WifiPhy from Object and manage it with a Ptr<>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2024
diff changeset
   517
MacLow::SetPhy (Ptr<WifiPhy> phy)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   518
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   519
  m_phy = phy;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   520
  m_phy->SetReceiveOkCallback (MakeCallback (&MacLow::DeaggregateAmpduAndReceive, this));
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   521
  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
   522
  SetupPhyMacLowListener (phy);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   523
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   524
11159
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   525
Ptr<WifiPhy>
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   526
MacLow::GetPhy (void) const
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   527
{
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   528
  return m_phy;
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   529
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   530
11159
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   531
void
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   532
MacLow::ResetPhy (void)
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   533
{
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   534
  m_phy->SetReceiveOkCallback (MakeNullCallback<void, Ptr<Packet>, double, WifiTxVector, enum WifiPreamble> ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   535
  m_phy->SetReceiveErrorCallback (MakeNullCallback<void, Ptr<const Packet>, double> ());
11159
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   536
  RemovePhyMacLowListener (m_phy);
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   537
  m_phy = 0;
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   538
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   539
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   540
void
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   541
MacLow::SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> manager)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   542
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   543
  m_stationManager = manager;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   544
}
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   545
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   546
void
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   547
MacLow::SetAddress (Mac48Address ad)
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   548
{
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   549
  m_self = ad;
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   550
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   551
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   552
void
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   553
MacLow::SetAckTimeout (Time ackTimeout)
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   554
{
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   555
  m_ackTimeout = ackTimeout;
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   556
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   557
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   558
void
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   559
MacLow::SetBasicBlockAckTimeout (Time blockAckTimeout)
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   560
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   561
  m_basicBlockAckTimeout = blockAckTimeout;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   562
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   563
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   564
void
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   565
MacLow::SetCompressedBlockAckTimeout (Time blockAckTimeout)
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   566
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   567
  m_compressedBlockAckTimeout = blockAckTimeout;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   568
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   569
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   570
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   571
MacLow::SetCtsToSelfSupported (bool enable)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   572
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   573
  m_ctsToSelfSupported = enable;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   574
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   575
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   576
bool
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   577
MacLow::GetCtsToSelfSupported () const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   578
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   579
  return m_ctsToSelfSupported;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   580
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   581
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   582
void
3597
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   583
MacLow::SetCtsTimeout (Time ctsTimeout)
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   584
{
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   585
  m_ctsTimeout = ctsTimeout;
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   586
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   587
3598
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   588
void
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   589
MacLow::SetSifs (Time sifs)
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   590
{
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   591
  m_sifs = sifs;
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   592
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   593
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   594
void
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   595
MacLow::SetSlotTime (Time slotTime)
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   596
{
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   597
  m_slotTime = slotTime;
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   598
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   599
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   600
void
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   601
MacLow::SetPifs (Time pifs)
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   602
{
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   603
  m_pifs = pifs;
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   604
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   605
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   606
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   607
MacLow::SetRifs (Time rifs)
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
  m_rifs = rifs;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   610
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   611
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   612
void
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   613
MacLow::SetBssid (Mac48Address bssid)
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   614
{
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   615
  m_bssid = bssid;
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   616
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   617
7333
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   618
void
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   619
MacLow::SetPromisc (void)
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   620
{
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   621
  m_promisc = true;
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
   622
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   623
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   624
Mac48Address
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   625
MacLow::GetAddress (void) const
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   626
{
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   627
  return m_self;
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   628
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   629
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   630
Time
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   631
MacLow::GetAckTimeout (void) const
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   632
{
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   633
  return m_ackTimeout;
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   634
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   635
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   636
Time
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   637
MacLow::GetBasicBlockAckTimeout () const
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   638
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   639
  return m_basicBlockAckTimeout;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   640
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   641
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   642
Time
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   643
MacLow::GetCompressedBlockAckTimeout () const
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   644
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   645
  return m_compressedBlockAckTimeout;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   646
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   647
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   648
Time
3597
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   649
MacLow::GetCtsTimeout (void) const
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   650
{
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   651
  return m_ctsTimeout;
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   652
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   653
3598
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   654
Time
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   655
MacLow::GetSifs (void) const
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   656
{
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   657
  return m_sifs;
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   658
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   659
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   660
Time
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   661
MacLow::GetRifs (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   662
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   663
  return m_rifs;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   664
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   665
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   666
Time
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   667
MacLow::GetSlotTime (void) const
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   668
{
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   669
  return m_slotTime;
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   670
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   671
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   672
Time
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   673
MacLow::GetPifs (void) const
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   674
{
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   675
  return m_pifs;
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   676
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   677
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   678
Mac48Address
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   679
MacLow::GetBssid (void) const
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   680
{
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   681
  return m_bssid;
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   682
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   683
10459
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10216
diff changeset
   684
bool
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10216
diff changeset
   685
MacLow::IsPromisc (void) const
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10216
diff changeset
   686
{
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10216
diff changeset
   687
  return m_promisc;
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10216
diff changeset
   688
}
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   689
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   690
void
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   691
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
   692
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   693
  m_rxCallback = callback;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   694
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   695
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   696
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
   697
MacLow::RegisterDcfListener (MacLowDcfListener *listener)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   698
{
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
   699
  m_dcfListeners.push_back (listener);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   700
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   701
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   702
bool
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   703
MacLow::IsAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   704
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   705
  uint32_t size, actualSize;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   706
  WifiMacTrailer fcs;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   707
  size = packet->GetSize () + hdr.GetSize () + fcs.GetSerializedSize ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   708
  Ptr<Packet> p = AggregateToAmpdu (packet, hdr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   709
  actualSize = p->GetSize ();
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   710
  if (actualSize > size)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   711
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   712
      m_currentPacket = p;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   713
      return true;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   714
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   715
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   716
    {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   717
      return false;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   718
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   719
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   720
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   721
void
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   722
MacLow::StartTransmission (Ptr<const Packet> packet,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   723
                           const WifiMacHeader* hdr,
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   724
                           MacLowTransmissionParameters params,
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   725
                           MacLowTransmissionListener *listener)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   726
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   727
  NS_LOG_FUNCTION (this << packet << hdr << params << listener);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   728
  /* m_currentPacket is not NULL because someone started
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   729
   * a transmission and was interrupted before one of:
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   730
   *   - ctsTimeout
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   731
   *   - sendDataAfterCTS
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   732
   * 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
   733
   * 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
   734
   * call to CancelAllEvents (because of at least one
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   735
   * of these two timers) which will trigger a call to the
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   736
   * previous listener's cancel method.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   737
   *
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   738
   * This typically happens because the high-priority
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   739
   * QapScheduler has taken access to the channel from
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   740
   * one of the Edca of the QAP.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   741
   */
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   742
  m_currentPacket = packet->Copy ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   743
  m_currentHdr = *hdr;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   744
  CancelAllEvents ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   745
  m_listener = listener;
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   746
  m_txParams = params;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   747
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   748
  if (!m_currentHdr.IsQosData () && !m_currentHdr.IsBlockAck () && !m_currentHdr.IsBlockAckReq ())
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   749
    {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   750
      //This is mainly encountered when a higher priority control frame (such as beacons)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   751
      //is sent between A-MPDU transmissions. It avoids to unexpectedly flush the aggregate
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   752
      //queue when previous RTS request has failed.
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   753
      m_ampdu = false;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   754
    }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   755
  else if (m_aggregateQueue->GetSize () > 0)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   756
    {
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   757
      //m_aggregateQueue > 0 occurs when a RTS/CTS exchange failed before an A-MPDU transmission.
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   758
      //In that case, we transmit the same A-MPDU as previously.
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   759
      m_sentMpdus = m_aggregateQueue->GetSize ();
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   760
      m_ampdu = true;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   761
      if (m_sentMpdus > 1)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   762
        {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   763
          m_txParams.EnableCompressedBlockAck ();
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   764
        }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   765
      else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   766
        {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   767
          //VHT single MPDUs are followed by normal ACKs
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   768
          m_txParams.EnableAck ();
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   769
        }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   770
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   771
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   772
    {
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   773
      //Perform MPDU aggregation if possible
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   774
      m_ampdu = IsAmpdu (m_currentPacket, m_currentHdr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   775
      if (m_ampdu)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   776
        {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   777
          AmpduTag ampdu;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   778
          m_currentPacket->PeekPacketTag (ampdu);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   779
          if (ampdu.GetNoOfMpdus () > 1)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   780
            {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   781
              m_txParams.EnableCompressedBlockAck ();
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   782
            }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   783
          else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   784
            {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   785
              //VHT single MPDUs are followed by normal ACKs
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   786
              m_txParams.EnableAck ();
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   787
            }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   788
        }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   789
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   790
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   791
  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
   792
                ", to=" << m_currentHdr.GetAddr1 () << ", listener=" << m_listener);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   793
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   794
  if (m_txParams.MustSendRts ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   795
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   796
      SendRtsForPacket ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   797
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   798
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   799
    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   800
      if (NeedCtsToSelf () && m_ctsToSelfSupported)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   801
        {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   802
          SendCtsToSelf ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   803
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   804
      else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   805
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   806
          SendDataPacket ();
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   807
        }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   808
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   809
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   810
  /* 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
   811
  NS_ASSERT (m_phy->IsStateTx ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   812
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   813
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   814
bool
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   815
MacLow::NeedCtsToSelf (void)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   816
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   817
  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   818
  return m_stationManager->NeedCtsToSelf (dataTxVector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
   819
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   820
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   821
void
3899
804d92c1f7c3 constify
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3208
diff changeset
   822
MacLow::ReceiveError (Ptr<const Packet> packet, double rxSnr)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   823
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
   824
  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
   825
  NS_LOG_DEBUG ("rx failed ");
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   826
  AmpduTag ampdu;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   827
  Ptr<Packet> pkt = packet->Copy ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   828
  bool isInAmpdu = pkt->RemovePacketTag (ampdu);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   829
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   830
  if (isInAmpdu && m_receivedAtLeastOneMpdu && (ampdu.GetNoOfMpdus () == 1))
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   831
    {
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   832
      MpduAggregator::DeaggregatedMpdus packets = MpduAggregator::Deaggregate (pkt);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   833
      MpduAggregator::DeaggregatedMpdusCI n = packets.begin ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   834
      WifiMacHeader hdr;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   835
      (*n).first->PeekHeader (hdr);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   836
      if (hdr.IsQosData ())
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   837
        {
11614
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   838
          uint8_t tid = hdr.GetQosTid ();
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   839
          AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), tid));
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   840
          if (it != m_bAckAgreements.end ())
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   841
            {
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   842
              NS_LOG_DEBUG ("last a-mpdu subframe detected/sendImmediateBlockAck from=" << hdr.GetAddr2 ());
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   843
              m_sendAckEvent = Simulator::Schedule (GetSifs (),
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   844
                                                    &MacLow::SendBlockAckAfterAmpdu, this,
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   845
                                                    hdr.GetQosTid (),
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   846
                                                    hdr.GetAddr2 (),
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   847
                                                    hdr.GetDuration (),
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   848
                                                    m_currentTxVector);
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   849
              m_receivedAtLeastOneMpdu = false;
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   850
            }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   851
        }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   852
      else if (hdr.IsBlockAckReq ())
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   853
        {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   854
          NS_LOG_DEBUG ("last a-mpdu subframe is BAR");
11614
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
   855
          m_receivedAtLeastOneMpdu = false;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   856
        }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   857
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   858
  else if (m_txParams.MustWaitFastAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   859
    {
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   860
      NS_ASSERT (m_fastAckFailedTimeoutEvent.IsExpired ());
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   861
      m_fastAckFailedTimeoutEvent = Simulator::Schedule (GetSifs (),
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   862
                                                         &MacLow::FastAckFailedTimeout, this);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   863
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   864
  return;
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
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   867
void
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   868
MacLow::NotifySwitchingStartNow (Time duration)
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   869
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   870
  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
   871
  m_stationManager->Reset ();
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   872
  CancelAllEvents ();
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   873
  if (m_navCounterResetCtsMissed.IsRunning ())
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   874
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   875
      m_navCounterResetCtsMissed.Cancel ();
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   876
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   877
  m_lastNavStart = Simulator::Now ();
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   878
  m_lastNavDuration = Seconds (0);
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   879
  m_currentPacket = 0;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   880
  m_listener = 0;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   881
}
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 5146
diff changeset
   882
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   883
void
10883
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   884
MacLow::NotifySleepNow (void)
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   885
{
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   886
  NS_LOG_DEBUG ("Device in sleep mode. Cancelling MAC pending events");
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   887
  CancelAllEvents ();
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   888
  if (m_navCounterResetCtsMissed.IsRunning ())
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   889
    {
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   890
      m_navCounterResetCtsMissed.Cancel ();
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   891
    }
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   892
  m_lastNavStart = Simulator::Now ();
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   893
  m_lastNavDuration = Seconds (0);
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   894
  m_currentPacket = 0;
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   895
  m_listener = 0;
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   896
}
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   897
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10483
diff changeset
   898
void
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   899
MacLow::ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiTxVector txVector, WifiPreamble preamble, bool ampduSubframe)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   900
{
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   901
  NS_LOG_FUNCTION (this << packet << rxSnr << txVector.GetMode () << preamble);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   902
  /* A packet is received from the PHY.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   903
   * When we have handled this packet,
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   904
   * we handle any packet present in the
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   905
   * packet queue.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   906
   */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   907
  WifiMacHeader hdr;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
   908
  packet->RemoveHeader (hdr);
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   909
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
   910
  bool isPrevNavZero = IsNavZero ();
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
   911
  NS_LOG_DEBUG ("duration/id=" << hdr.GetDuration ());
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   912
  NotifyNav (packet, hdr, preamble);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   913
  if (hdr.IsRts ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   914
    {
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
   915
      /* 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
   916
       * 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
   917
       * 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
   918
       * 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
   919
       * 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
   920
       */
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   921
      if (ampduSubframe)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   922
        {
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   923
          NS_FATAL_ERROR ("Received RTS as part of an A-MPDU");
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   924
        }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   925
      else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   926
        {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   927
          if (isPrevNavZero
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   928
              && hdr.GetAddr1 () == m_self)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   929
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   930
              NS_LOG_DEBUG ("rx RTS from=" << hdr.GetAddr2 () << ", schedule CTS");
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   931
              NS_ASSERT (m_sendCtsEvent.IsExpired ());
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   932
              m_stationManager->ReportRxOk (hdr.GetAddr2 (), &hdr,
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   933
                                            rxSnr, txVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   934
              m_sendCtsEvent = Simulator::Schedule (GetSifs (),
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   935
                                                    &MacLow::SendCtsAfterRts, this,
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   936
                                                    hdr.GetAddr2 (),
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   937
                                                    hdr.GetDuration (),
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   938
                                                    txVector,
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   939
                                                    rxSnr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   940
            }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   941
          else
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   942
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   943
              NS_LOG_DEBUG ("rx RTS from=" << hdr.GetAddr2 () << ", cannot schedule CTS");
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   944
            }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   945
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   946
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   947
  else if (hdr.IsCts ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   948
           && hdr.GetAddr1 () == m_self
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   949
           && m_ctsTimeoutEvent.IsRunning ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   950
           && m_currentPacket != 0)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   951
    {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   952
      if (ampduSubframe)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   953
        {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   954
          NS_FATAL_ERROR ("Received CTS as part of an A-MPDU");
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   955
        }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   956
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   957
      NS_LOG_DEBUG ("receive cts from=" << m_currentHdr.GetAddr1 ());
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   958
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   959
      SnrTag tag;
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4264
diff changeset
   960
      packet->RemovePacketTag (tag);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   961
      m_stationManager->ReportRxOk (m_currentHdr.GetAddr1 (), &m_currentHdr,
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   962
                                    rxSnr, txVector.GetMode ());
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   963
      m_stationManager->ReportRtsOk (m_currentHdr.GetAddr1 (), &m_currentHdr,
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   964
                                     rxSnr, txVector.GetMode (), tag.Get ());
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
   965
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   966
      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
   967
      NotifyCtsTimeoutResetNow ();
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   968
      m_listener->GotCts (rxSnr, txVector.GetMode ());
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   969
      NS_ASSERT (m_sendDataEvent.IsExpired ());
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   970
      m_sendDataEvent = Simulator::Schedule (GetSifs (),
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   971
                                             &MacLow::SendDataAfterCts, this,
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   972
                                             hdr.GetAddr1 (),
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   973
                                             hdr.GetDuration ());
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   974
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   975
  else if (hdr.IsAck ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   976
           && hdr.GetAddr1 () == m_self
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   977
           && (m_normalAckTimeoutEvent.IsRunning ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   978
               || m_fastAckTimeoutEvent.IsRunning ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   979
               || m_superFastAckTimeoutEvent.IsRunning ())
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   980
           && m_txParams.MustWaitAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   981
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   982
      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
   983
      SnrTag tag;
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4264
diff changeset
   984
      packet->RemovePacketTag (tag);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   985
      m_stationManager->ReportRxOk (m_currentHdr.GetAddr1 (), &m_currentHdr,
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   986
                                    rxSnr, txVector.GetMode ());
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
   987
      m_stationManager->ReportDataOk (m_currentHdr.GetAddr1 (), &m_currentHdr,
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
   988
                                      rxSnr, txVector.GetMode (), tag.Get ());
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
   989
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   990
      FlushAggregateQueue ();
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
   991
      m_ampdu = false;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   992
      bool gotAck = false;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
   993
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   994
      if (m_txParams.MustWaitNormalAck ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
   995
          && m_normalAckTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   996
        {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   997
          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
   998
          NotifyAckTimeoutResetNow ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   999
          gotAck = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1000
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1001
      if (m_txParams.MustWaitFastAck ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1002
          && m_fastAckTimeoutEvent.IsRunning ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1003
        {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1004
          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
  1005
          NotifyAckTimeoutResetNow ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1006
          gotAck = true;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1007
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1008
      if (gotAck)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1009
        {
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1010
          m_listener->GotAck (rxSnr, txVector.GetMode ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1011
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1012
      if (m_txParams.HasNextPacket ())
4670
98aac83e4416 coding style
Mirko Banchi <mk.banchi@gmail.com>
parents: 4556
diff changeset
  1013
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1014
          m_waitSifsEvent = Simulator::Schedule (GetSifs (),
4671
a99a57f697de coding style
Mirko Banchi <mk.banchi@gmail.com>
parents: 4670
diff changeset
  1015
                                                 &MacLow::WaitSifsAfterEndTx, this);
4670
98aac83e4416 coding style
Mirko Banchi <mk.banchi@gmail.com>
parents: 4556
diff changeset
  1016
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1017
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1018
  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
  1019
           && (m_txParams.MustWaitBasicBlockAck () || m_txParams.MustWaitCompressedBlockAck ())
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1020
           && 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
  1021
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1022
      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
  1023
      CtrlBAckResponseHeader blockAck;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1024
      packet->RemoveHeader (blockAck);
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1025
      m_blockAckTimeoutEvent.Cancel ();
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1026
      NotifyAckTimeoutResetNow ();
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1027
      m_listener->GotBlockAck (&blockAck, hdr.GetAddr2 (), txVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1028
      m_sentMpdus = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1029
      m_ampdu = false;
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1030
      FlushAggregateQueue ();
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1031
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1032
  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
  1033
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1034
      CtrlBAckRequestHeader blockAckReq;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1035
      packet->RemoveHeader (blockAckReq);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1036
      if (!blockAckReq.IsMultiTid ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1037
        {
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
  1038
          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
  1039
          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
  1040
          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
  1041
            {
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
  1042
              //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
  1043
              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
  1044
              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
  1045
              (*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
  1046
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1047
              NS_ASSERT (m_sendAckEvent.IsExpired ());
11083
96e983e7cd5d fix typos in wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11041
diff changeset
  1048
              /* See section 11.5.3 in IEEE 802.11 for mean of this timer */
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1049
              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
  1050
              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
  1051
                {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1052
                  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
  1053
                  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
  1054
                                                        &MacLow::SendBlockAckAfterBlockAckRequest, this,
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1055
                                                        blockAckReq,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1056
                                                        hdr.GetAddr2 (),
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1057
                                                        hdr.GetDuration (),
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1058
                                                        txVector.GetMode ());
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1059
                }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1060
              else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1061
                {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1062
                  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
  1063
                }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1064
              m_receivedAtLeastOneMpdu = false;
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1065
            }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1066
          else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1067
            {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1068
              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
  1069
            }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1070
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1071
      else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1072
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1073
          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
  1074
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1075
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1076
  else if (hdr.IsCtl ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1077
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1078
      NS_LOG_DEBUG ("rx drop " << hdr.GetTypeString ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1079
      m_receivedAtLeastOneMpdu = false;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1080
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1081
  else if (hdr.GetAddr1 () == m_self)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1082
    {
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
  1083
      m_stationManager->ReportRxOk (hdr.GetAddr2 (), &hdr,
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1084
                                    rxSnr, txVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1085
      if (hdr.IsQosData () && ReceiveMpdu (packet, hdr))
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1086
        {
11083
96e983e7cd5d fix typos in wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11041
diff changeset
  1087
          /* From section 9.10.4 in IEEE 802.11:
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1088
             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
  1089
             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
  1090
             regardless of the value of the Ack Policy subfield within the
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1091
             QoS Control field of the QoS data frame. */
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1092
          if (hdr.IsQosAck () && !ampduSubframe)
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1093
            {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1094
              NS_LOG_DEBUG ("rx QoS unicast/sendAck 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
  1095
              AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ()));
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1096
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  1097
              RxCompleteBufferedPacketsWithSmallerSequence (it->second.first.GetStartingSequenceControl (),
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1098
                                                            hdr.GetAddr2 (), hdr.GetQosTid ());
6599
8c1a255c05a3 Rename MacLow::RxCompleteBufferedPacket to a more appropriate name
Mirko Banchi <mk.banchi@gmail.com>
parents: 6595
diff changeset
  1099
              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
  1100
              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
  1101
              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
  1102
                                                    &MacLow::SendAckAfterData, this,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1103
                                                    hdr.GetAddr2 (),
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1104
                                                    hdr.GetDuration (),
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1105
                                                    txVector.GetMode (),
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1106
                                                    rxSnr);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1107
              m_receivedAtLeastOneMpdu = false;
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1108
            }
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1109
          else if (hdr.IsQosBlockAck ())
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1110
            {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1111
              AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ()));
11083
96e983e7cd5d fix typos in wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11041
diff changeset
  1112
              /* See section 11.5.3 in IEEE 802.11 for mean of this timer */
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1113
              ResetBlockAckInactivityTimerIfNeeded (it->second.first);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1114
            }
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1115
          return;
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1116
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1117
      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
  1118
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1119
          /* 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
  1120
             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
  1121
11083
96e983e7cd5d fix typos in wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11041
diff changeset
  1122
             From section 11.5.3 in IEEE 802.11e:
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1123
             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
  1124
             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
  1125
             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
  1126
             mechanisms. */
6331
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6304
diff changeset
  1127
          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
  1128
          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
  1129
          return;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1130
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1131
      else if (hdr.IsQosData () && hdr.IsQosNoAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1132
        {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1133
          if (ampduSubframe)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1134
            {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1135
              NS_LOG_DEBUG ("rx Ampdu with No Ack Policy from=" << hdr.GetAddr2 ());
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1136
            }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1137
          else
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1138
            {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1139
              NS_LOG_DEBUG ("rx unicast/noAck from=" << hdr.GetAddr2 ());
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1140
            }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1141
        }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1142
      else if (hdr.IsData () || hdr.IsMgt ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1143
        {
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1144
          if (hdr.IsMgt () && ampduSubframe)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1145
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1146
              NS_FATAL_ERROR ("Received management packet as part of an A-MPDU");
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1147
            }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1148
          else
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1149
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1150
              NS_LOG_DEBUG ("rx unicast/sendAck from=" << hdr.GetAddr2 ());
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1151
              NS_ASSERT (m_sendAckEvent.IsExpired ());
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1152
              m_sendAckEvent = Simulator::Schedule (GetSifs (),
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1153
                                                    &MacLow::SendAckAfterData, this,
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1154
                                                    hdr.GetAddr2 (),
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1155
                                                    hdr.GetDuration (),
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1156
                                                    txVector.GetMode (),
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1157
                                                    rxSnr);
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1158
              m_receivedAtLeastOneMpdu = false;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1159
            }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1160
        }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1161
      goto rxPacket;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1162
    }
4079
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
  1163
  else if (hdr.GetAddr1 ().IsGroup ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1164
    {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1165
      if (ampduSubframe)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1166
        {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1167
          NS_FATAL_ERROR ("Received group addressed packet as part of an A-MPDU");
4079
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
  1168
        }
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
  1169
      else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1170
        {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1171
          if (hdr.IsData () || hdr.IsMgt ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1172
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1173
              NS_LOG_DEBUG ("rx group from=" << hdr.GetAddr2 ());
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1174
              m_receivedAtLeastOneMpdu = false;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1175
              goto rxPacket;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1176
            }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1177
          else
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1178
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1179
              // DROP
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1180
            }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1181
        }
4079
210d64d11998 add wifi multicast support. Based on patch by Mauchle Fabian.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4003
diff changeset
  1182
    }
7333
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
  1183
  else if (m_promisc)
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
  1184
    {
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
  1185
      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
  1186
      if (hdr.IsData ())
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
  1187
        {
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
  1188
          goto rxPacket;
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
  1189
        }
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7252
diff changeset
  1190
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1191
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1192
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1193
      //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
  1194
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1195
  return;
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1196
rxPacket:
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1197
  WifiMacTrailer fcs;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1198
  packet->RemoveTrailer (fcs);
1964
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1928
diff changeset
  1199
  m_rxCallback (packet, &hdr);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1200
  return;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1201
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1202
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1203
uint8_t
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1204
MacLow::GetTid (Ptr<const Packet> packet, const WifiMacHeader hdr) const
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1205
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1206
  uint8_t tid = 0;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1207
  if (hdr.IsQosData ())
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1208
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1209
      tid = hdr.GetQosTid ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1210
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1211
  else if (hdr.IsBlockAckReq ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1212
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1213
      CtrlBAckRequestHeader baReqHdr;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1214
      packet->PeekHeader (baReqHdr);
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1215
      tid = baReqHdr.GetTidInfo ();
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1216
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1217
  else if (hdr.IsBlockAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1218
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1219
      CtrlBAckResponseHeader baRespHdr;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1220
      packet->PeekHeader (baRespHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1221
      tid = baRespHdr.GetTidInfo ();
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1222
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1223
  return tid;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1224
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1225
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1226
uint32_t
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1227
MacLow::GetAckSize (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1228
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1229
  WifiMacHeader ack;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1230
  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
  1231
  return ack.GetSize () + 4;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1232
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1233
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1234
uint32_t
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1235
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
  1236
{
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1237
  WifiMacHeader hdr;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1238
  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
  1239
  CtrlBAckResponseHeader blockAck;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1240
  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
  1241
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1242
      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
  1243
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1244
  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
  1245
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1246
      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
  1247
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1248
  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
  1249
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1250
      //Not implemented
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1251
      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
  1252
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1253
  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
  1254
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1255
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1256
uint32_t
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1257
MacLow::GetRtsSize (void) const
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1258
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1259
  WifiMacHeader rts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1260
  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
  1261
  return rts.GetSize () + 4;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1262
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1263
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1264
Time
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1265
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
  1266
{
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1267
  WifiTxVector ackTxVector = GetAckTxVectorForData (to, dataTxVector.GetMode ());
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1268
  return GetAckDuration (ackTxVector);
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1269
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1270
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1271
Time
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1272
MacLow::GetAckDuration (WifiTxVector ackTxVector) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1273
{
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1274
  NS_ASSERT (ackTxVector.GetMode ().GetModulationClass () != WIFI_MOD_CLASS_HT); //ACK should always use non-HT PPDU (HT PPDU cases not supported yet)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1275
  return m_phy->CalculateTxDuration (GetAckSize (), ackTxVector, WIFI_PREAMBLE_LONG, m_phy->GetFrequency (), 0, 0);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1276
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1277
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1278
Time
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1279
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
  1280
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1281
  /*
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1282
   * For immediate Basic BlockAck we should transmit the frame with the same WifiMode
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1283
   * as the BlockAckReq.
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1284
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1285
  WifiPreamble preamble;
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1286
  if (blockAckReqTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT && type == BASIC_BLOCK_ACK)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1287
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1288
      preamble = WIFI_PREAMBLE_HT_MF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1289
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1290
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1291
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1292
      preamble = WIFI_PREAMBLE_LONG;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1293
    }
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1294
  return m_phy->CalculateTxDuration (GetBlockAckSize (type), blockAckReqTxVector, preamble, m_phy->GetFrequency (), 0, 0);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1295
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1296
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1297
Time
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1298
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
  1299
{
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1300
  WifiTxVector ctsTxVector = GetCtsTxVectorForRts (to, rtsTxVector.GetMode ());
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1301
  return GetCtsDuration (ctsTxVector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1302
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1303
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1304
Time
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1305
MacLow::GetCtsDuration (WifiTxVector ctsTxVector) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1306
{
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1307
  NS_ASSERT (ctsTxVector.GetMode ().GetModulationClass () != WIFI_MOD_CLASS_HT); //CTS should always use non-HT PPDU (HT PPDU cases not supported yet)
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1308
  return m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, WIFI_PREAMBLE_LONG, m_phy->GetFrequency (), 0, 0);
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1309
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1310
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1311
uint32_t
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1312
MacLow::GetCtsSize (void) const
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
  WifiMacHeader cts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1315
  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
  1316
  return cts.GetSize () + 4;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1317
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1318
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1319
uint32_t
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1320
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
  1321
{
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1322
  uint32_t size;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1323
  WifiMacTrailer fcs;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1324
  if (m_ampdu)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1325
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1326
      size = packet->GetSize ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1327
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1328
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1329
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1330
      size = packet->GetSize () + hdr->GetSize () + fcs.GetSerializedSize ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1331
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1332
  return size;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1333
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1334
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1335
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1336
MacLow::GetCtsToSelfTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1337
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1338
  return m_stationManager->GetCtsToSelfTxVector (hdr, packet);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1339
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1340
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1341
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1342
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
  1343
{
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1344
  Mac48Address to = hdr->GetAddr1 ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1345
  return m_stationManager->GetRtsTxVector (to, hdr, packet);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1346
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1347
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1348
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1349
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
  1350
{
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1351
  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
  1352
  WifiMacTrailer fcs;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1353
  uint32_t size =  packet->GetSize () + hdr->GetSize () + fcs.GetSerializedSize ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1354
  //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
  1355
  return m_stationManager->GetDataTxVector (to, hdr, packet, size);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1356
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1357
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1358
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1359
MacLow::GetCtsTxVector (Mac48Address to, WifiMode rtsTxMode) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1360
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1361
  return m_stationManager->GetCtsTxVector (to, rtsTxMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1362
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1363
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1364
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1365
MacLow::GetAckTxVector (Mac48Address to, WifiMode dataTxMode) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1366
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1367
  return m_stationManager->GetAckTxVector (to, dataTxMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1368
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1369
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1370
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1371
MacLow::GetBlockAckTxVector (Mac48Address to, WifiMode dataTxMode) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1372
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1373
  return m_stationManager->GetBlockAckTxVector (to, dataTxMode);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1374
}
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
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1377
MacLow::GetCtsTxVectorForRts (Mac48Address to, WifiMode rtsTxMode) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1378
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1379
  return GetCtsTxVector (to, rtsTxMode);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1380
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1381
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1382
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1383
MacLow::GetAckTxVectorForData (Mac48Address to, WifiMode dataTxMode) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1384
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1385
  return GetAckTxVector (to, dataTxMode);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1386
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1387
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1388
Time
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1389
MacLow::CalculateOverallTxTime (Ptr<const Packet> packet,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1390
                                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
  1391
                                const MacLowTransmissionParameters& params) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1392
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1393
  WifiPreamble preamble;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1394
  Time txTime = Seconds (0);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1395
  if (params.MustSendRts ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1396
    {
10201
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1397
      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
  1398
      //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
  1399
      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
  1400
        {
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1401
          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
  1402
        }
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1403
      else
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1404
        {
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1405
          //Otherwise, RTS should always use non-HT PPDU (HT PPDU cases not supported yet)
10201
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1406
          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
  1407
        }
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1408
      txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency (), 0, 0);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1409
      txTime += GetCtsDuration (hdr->GetAddr1 (), rtsTxVector);
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
  1410
      txTime += Time (GetSifs () * 2);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1411
    }
10201
8bdf35df4bf1 avoid crash when packets sent by higher layer cause no RTS/CTS operation
Junling Bu <linlinjavaer@gmail.com>
parents: 10139
diff changeset
  1412
  WifiTxVector dataTxVector = GetDataTxVector (packet, hdr);
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1413
  if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1414
    {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1415
      preamble = WIFI_PREAMBLE_VHT;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1416
    }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1417
  else if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1418
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1419
      preamble = WIFI_PREAMBLE_HT_GF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1420
    }
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1421
  else if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1422
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1423
      preamble = WIFI_PREAMBLE_HT_MF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1424
    }
11420
ef4dc0386e71 postfix for commit 11384:935dc1cc08a4
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11398
diff changeset
  1425
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1426
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1427
      preamble = WIFI_PREAMBLE_LONG;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1428
    }
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1429
  uint32_t dataSize = GetSize (packet, hdr);
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1430
  txTime += m_phy->CalculateTxDuration (dataSize, dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
1996
454a63cf6549 cts, rts, and ack sizes must take into account fcs padding
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1993
diff changeset
  1431
  if (params.MustWaitAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1432
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1433
      txTime += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1434
      txTime += GetAckDuration (hdr->GetAddr1 (), dataTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1435
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1436
  return txTime;
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
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1439
Time
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1440
MacLow::CalculateTransmissionTime (Ptr<const Packet> packet,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1441
                                   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
  1442
                                   const MacLowTransmissionParameters& params) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1443
{
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2177
diff changeset
  1444
  Time txTime = CalculateOverallTxTime (packet, hdr, params);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1445
  if (params.HasNextPacket ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1446
    {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1447
      WifiTxVector dataTxVector = GetDataTxVector (packet, hdr);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1448
      WifiPreamble preamble;
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1449
      if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1450
        {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1451
          preamble = WIFI_PREAMBLE_VHT;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1452
        }
11420
ef4dc0386e71 postfix for commit 11384:935dc1cc08a4
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11398
diff changeset
  1453
      if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1454
        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1455
          preamble = WIFI_PREAMBLE_HT_GF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1456
        }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1457
      else if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1458
        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1459
          preamble = WIFI_PREAMBLE_HT_MF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1460
        }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1461
      else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1462
        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1463
          preamble = WIFI_PREAMBLE_LONG;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1464
        }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1465
      txTime += GetSifs ();
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1466
      txTime += m_phy->CalculateTxDuration (params.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1467
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1468
  return txTime;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1469
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1470
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1471
void
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1472
MacLow::NotifyNav (Ptr<const Packet> packet,const WifiMacHeader &hdr, WifiPreamble preamble)
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1473
{
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1474
  NS_ASSERT (m_lastNavStart <= Simulator::Now ());
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1475
  Time duration = hdr.GetDuration ();
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1476
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1477
  if (hdr.IsCfpoll ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1478
      && hdr.GetAddr2 () == m_bssid)
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1479
    {
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1480
      //see section 9.3.2.2 802.11-1999
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1481
      DoNavResetNow (duration);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1482
      return;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1483
    }
9894
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1484
  /// \todo We should also handle CF_END specially here
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1485
  /// 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
  1486
  else if (hdr.GetAddr1 () != m_self)
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1487
    {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1488
      // 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
  1489
      bool navUpdated = DoNavStartNow (duration);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1490
      if (hdr.IsRts () && navUpdated)
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1491
        {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1492
          /**
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1493
           * 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
  1494
           * 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
  1495
           * 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
  1496
           * 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
  1497
           * 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
  1498
           * 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
  1499
           */
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1500
          WifiMacHeader cts;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1501
          cts.SetType (WIFI_MAC_CTL_CTS);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1502
          WifiTxVector txVector = GetRtsTxVector (packet, &hdr);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1503
          Time navCounterResetCtsMissedDelay =
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1504
            m_phy->CalculateTxDuration (cts.GetSerializedSize (), txVector, preamble, m_phy->GetFrequency (), 0, 0) +
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
  1505
            Time (2 * GetSifs ()) + Time (2 * GetSlotTime ());
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1506
          m_navCounterResetCtsMissed = Simulator::Schedule (navCounterResetCtsMissedDelay,
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1507
                                                            &MacLow::NavCounterResetCtsMissed, this,
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1508
                                                            Simulator::Now ());
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1509
        }
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1510
    }
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1511
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1512
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1513
void
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1514
MacLow::NavCounterResetCtsMissed (Time rtsEndRxTime)
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1515
{
10216
48e0bcbc4281 Bug 1691 - RTS/CTS NAV reset prematurely
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10201
diff changeset
  1516
  if (m_phy->GetLastRxStartTime () < rtsEndRxTime)
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1517
    {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1518
      DoNavResetNow (Seconds (0.0));
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1519
    }
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1520
}
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1521
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1522
void
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1523
MacLow::DoNavResetNow (Time duration)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1524
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1525
  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
  1526
    {
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1527
      (*i)->NavReset (duration);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1528
    }
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1529
  m_lastNavStart = Simulator::Now ();
11543
ec5dd7666b77 fix incorrect NAV duration (reported by Xiaowen Wang)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11535
diff changeset
  1530
  m_lastNavDuration = duration;
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1531
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1532
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1533
bool
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1534
MacLow::DoNavStartNow (Time duration)
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1535
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1536
  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
  1537
    {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1538
      (*i)->NavStart (duration);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1539
    }
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1540
  Time newNavEnd = Simulator::Now () + duration;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1541
  Time oldNavEnd = m_lastNavStart + m_lastNavDuration;
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1542
  if (newNavEnd > oldNavEnd)
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1543
    {
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1544
      m_lastNavStart = Simulator::Now ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1545
      m_lastNavDuration = duration;
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1546
      return true;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1547
    }
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  1548
  return false;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1549
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1550
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
  1551
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
  1552
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
  1553
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1554
  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
  1555
    {
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1556
      (*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
  1557
    }
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1558
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1559
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
  1560
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
  1561
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
  1562
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1563
  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
  1564
    {
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1565
      (*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
  1566
    }
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1567
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1568
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
  1569
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
  1570
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
  1571
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1572
  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
  1573
    {
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1574
      (*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
  1575
    }
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1576
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1577
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
  1578
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
  1579
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
  1580
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1581
  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
  1582
    {
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1583
      (*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
  1584
    }
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 4502
diff changeset
  1585
}
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1586
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1587
void
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1588
MacLow::ForwardDown (Ptr<const Packet> packet, const WifiMacHeader* hdr,
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1589
                     WifiTxVector txVector, WifiPreamble preamble)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1590
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1591
  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
  1592
  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
  1593
                ", to=" << hdr->GetAddr1 () <<
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1594
                ", size=" << packet->GetSize () <<
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1595
                ", mode=" << txVector.GetMode  () <<
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  1596
                ", duration=" << hdr->GetDuration () <<
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1597
                ", seq=0x" << std::hex << m_currentHdr.GetSequenceControl () << std::dec);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1598
  if (!m_ampdu || hdr->IsRts ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1599
    {
11479
a3dcf66928f3 add support for HT MCS and A-MPDU in radiotap headers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
  1600
      m_phy->SendPacket (packet, txVector, preamble, 0, 0);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1601
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1602
  else
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1603
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1604
      Ptr<Packet> newPacket;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1605
      Ptr <const Packet> dequeuedPacket;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1606
      WifiMacHeader newHdr;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1607
      WifiMacTrailer fcs;
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1608
      uint32_t queueSize = m_aggregateQueue->GetSize ();
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1609
      bool vhtSingleMpdu = false;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1610
      bool last = false;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1611
      uint8_t packetType = 0;
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1612
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1613
      if (queueSize == 1)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1614
        {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1615
          vhtSingleMpdu = true;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1616
        }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1617
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1618
      //Add packet tag
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1619
      AmpduTag ampdutag;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1620
      ampdutag.SetAmpdu (true);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1621
      Time delay = Seconds (0);
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1622
      if (queueSize > 1 || vhtSingleMpdu)
11479
a3dcf66928f3 add support for HT MCS and A-MPDU in radiotap headers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
  1623
        {
a3dcf66928f3 add support for HT MCS and A-MPDU in radiotap headers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
  1624
          txVector.SetAggregation (true);
a3dcf66928f3 add support for HT MCS and A-MPDU in radiotap headers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
  1625
        }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1626
      for (; queueSize > 0; queueSize--)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1627
        {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1628
          dequeuedPacket = m_aggregateQueue->Dequeue (&newHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1629
          newPacket = dequeuedPacket->Copy ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1630
          newHdr.SetDuration (hdr->GetDuration ());
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1631
          newPacket->AddHeader (newHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1632
          newPacket->AddTrailer (fcs);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1633
          if (queueSize == 1)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1634
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1635
              last = true;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1636
              packetType = 2;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1637
            }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1638
          m_mpduAggregator->AddHeaderAndPad (newPacket, last, vhtSingleMpdu);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1639
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1640
          ampdutag.SetNoOfMpdus (queueSize);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1641
          newPacket->AddPacketTag (ampdutag);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1642
          if (delay == Seconds (0))
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1643
            {
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1644
              if (!vhtSingleMpdu)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1645
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1646
                  NS_LOG_DEBUG ("Sending MPDU as part of A-MPDU");
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1647
                  packetType = 1;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1648
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1649
              else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1650
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1651
                  packetType = 0;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1652
                }
11479
a3dcf66928f3 add support for HT MCS and A-MPDU in radiotap headers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
  1653
              m_phy->SendPacket (newPacket, txVector, preamble, packetType, m_mpduReferenceNumber);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1654
            }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1655
          else
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1656
            {
11479
a3dcf66928f3 add support for HT MCS and A-MPDU in radiotap headers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
  1657
              Simulator::Schedule (delay, &MacLow::SendPacket, this, newPacket, txVector, preamble, packetType, m_mpduReferenceNumber);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1658
            }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1659
          if (queueSize > 1)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1660
            {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1661
              delay = delay + m_phy->CalculateTxDuration (GetSize (newPacket, &newHdr), txVector, preamble, m_phy->GetFrequency (), packetType, 0);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1662
            }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1663
          preamble = WIFI_PREAMBLE_NONE;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1664
        }
11676
05ea1489e509 bug 2184: Integer overflow in MacLow
Tom Henderson <tomh@tomh.org>
parents: 11628
diff changeset
  1665
      m_mpduReferenceNumber += 1;  // this variable is allowed to overflow
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1666
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1667
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1668
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1669
void
11479
a3dcf66928f3 add support for HT MCS and A-MPDU in radiotap headers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
  1670
MacLow::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1671
{
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1672
  NS_LOG_DEBUG ("Sending MPDU as part of A-MPDU");
11479
a3dcf66928f3 add support for HT MCS and A-MPDU in radiotap headers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
  1673
  m_phy->SendPacket (packet, txVector, preamble, packetType, mpduReferenceNumber);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1674
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1675
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1676
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1677
MacLow::CtsTimeout (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1678
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1679
  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
  1680
  NS_LOG_DEBUG ("cts timeout");
9894
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1681
  /// \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
  1682
  /// 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
  1683
  /// 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
  1684
  m_stationManager->ReportRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1685
  if (m_sentMpdus == 0)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1686
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1687
      m_currentPacket = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1688
    }
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
  1689
  MacLowTransmissionListener *listener = m_listener;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1690
  m_listener = 0;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1691
  m_sentMpdus = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1692
  m_ampdu = false;
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
  1693
  listener->MissedCts ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1694
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1695
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1696
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1697
MacLow::NormalAckTimeout (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1698
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1699
  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
  1700
  NS_LOG_DEBUG ("normal ack timeout");
9894
ac4e52a91d5d Doxygenate todo's
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9238
diff changeset
  1701
  /// \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
  1702
  /// 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
  1703
  /// 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
  1704
  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
  1705
  MacLowTransmissionListener *listener = m_listener;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1706
  m_listener = 0;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1707
  m_sentMpdus = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1708
  m_ampdu = false;
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1709
  FlushAggregateQueue ();
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
  1710
  listener->MissedAck ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1711
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1712
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1713
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1714
MacLow::FastAckTimeout (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1715
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1716
  NS_LOG_FUNCTION (this);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
  1717
  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
  1718
  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
  1719
  m_listener = 0;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1720
  if (m_phy->IsStateIdle ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1721
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1722
      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
  1723
      listener->MissedAck ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1724
    }
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
  1725
  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
  1726
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1727
      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
  1728
    }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1729
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1730
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1731
void
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1732
MacLow::BlockAckTimeout (void)
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1733
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1734
  NS_LOG_FUNCTION (this);
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1735
  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
  1736
6068
a2127017ecb4 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6065 5964
diff changeset
  1737
  m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1738
  MacLowTransmissionListener *listener = m_listener;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1739
  m_listener = 0;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1740
  m_sentMpdus = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1741
  m_ampdu = false;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1742
  FlushAggregateQueue ();
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1743
  listener->MissedBlockAck ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1744
}
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1745
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1746
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1747
MacLow::SuperFastAckTimeout ()
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1748
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1749
  NS_LOG_FUNCTION (this);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5846
diff changeset
  1750
  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
  1751
  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
  1752
  m_listener = 0;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1753
  if (m_phy->IsStateIdle ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1754
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1755
      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
  1756
      listener->MissedAck ();
7141
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
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1759
    {
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  1760
      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
  1761
      listener->GotAck (0.0, WifiMode ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1762
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1763
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1764
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1765
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1766
MacLow::SendRtsForPacket (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1767
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1768
  NS_LOG_FUNCTION (this);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1769
  /* send an RTS for this packet. */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1770
  WifiMacHeader rts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1771
  rts.SetType (WIFI_MAC_CTL_RTS);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1772
  rts.SetDsNotFrom ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1773
  rts.SetDsNotTo ();
3659
653395340b5c should set retry bit in rts and acks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3658
diff changeset
  1774
  rts.SetNoRetry ();
2793
10a571d9a9f7 initialize no more fragment flag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2547
diff changeset
  1775
  rts.SetNoMoreFragments ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1776
  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
  1777
  rts.SetAddr2 (m_self);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1778
  WifiTxVector rtsTxVector = GetRtsTxVector (m_currentPacket, &m_currentHdr);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1779
  Time duration = Seconds (0);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1780
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1781
  WifiPreamble preamble;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1782
  //standard says RTS packets can have GF format sec 9.6.0e.1 page 110 bullet b 2
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1783
  if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1784
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1785
      preamble = WIFI_PREAMBLE_HT_GF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1786
    }
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1787
  else //Otherwise, RTS should always use non-HT PPDU (HT PPDU cases not supported yet)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1788
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1789
      preamble = WIFI_PREAMBLE_LONG;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1790
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1791
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1792
  if (m_txParams.HasDurationId ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1793
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1794
      duration += m_txParams.GetDurationId ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1795
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1796
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1797
    {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1798
      WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1799
      duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1800
      duration += GetCtsDuration (m_currentHdr.GetAddr1 (), rtsTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1801
      duration += GetSifs ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1802
      duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr),
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1803
                                              dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1804
      duration += GetSifs ();
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1805
      if (m_txParams.MustWaitBasicBlockAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1806
        {
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1807
          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1808
          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1809
        }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1810
      else if (m_txParams.MustWaitCompressedBlockAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1811
        {
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1812
          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1813
          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1814
        }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1815
      else if (m_txParams.MustWaitAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1816
        {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1817
          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1818
        }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1819
      if (m_txParams.HasNextPacket ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1820
        {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1821
          duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1822
                                                  dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1823
          if (m_txParams.MustWaitAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1824
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1825
              duration += GetSifs ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1826
              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1827
            }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1828
        }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1829
    }
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1830
  rts.SetDuration (duration);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1831
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1832
  Time txDuration = m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency (), 0, 0);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1833
  Time timerDelay = txDuration + GetCtsTimeout ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1834
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
  1835
  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
  1836
  NotifyCtsTimeoutStartNow (timerDelay);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1837
  m_ctsTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::CtsTimeout, this);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1838
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1839
  Ptr<Packet> packet = Create<Packet> ();
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1840
  packet->AddHeader (rts);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1841
  WifiMacTrailer fcs;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  1842
  packet->AddTrailer (fcs);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1843
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1844
  ForwardDown (packet, &rts, rtsTxVector,preamble);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1845
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1846
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1847
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1848
MacLow::StartDataTxTimers (WifiTxVector dataTxVector)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1849
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1850
  WifiPreamble preamble;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1851
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1852
  if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1853
    {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1854
      preamble = WIFI_PREAMBLE_VHT;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1855
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1856
  //Since it is data then it can have format = GF
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1857
  else if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1858
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1859
      preamble = WIFI_PREAMBLE_HT_GF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1860
    }
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1861
  else if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1862
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1863
      preamble = WIFI_PREAMBLE_HT_MF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1864
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1865
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1866
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1867
      preamble = WIFI_PREAMBLE_LONG;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1868
    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1869
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1870
  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1871
  if (m_txParams.MustWaitNormalAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1872
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1873
      Time timerDelay = txDuration + GetAckTimeout ();
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
  1874
      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
  1875
      NotifyAckTimeoutStartNow (timerDelay);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1876
      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
  1877
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1878
  else if (m_txParams.MustWaitFastAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1879
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1880
      Time timerDelay = txDuration + GetPifs ();
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
  1881
      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
  1882
      NotifyAckTimeoutStartNow (timerDelay);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1883
      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
  1884
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1885
  else if (m_txParams.MustWaitSuperFastAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1886
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1887
      Time timerDelay = txDuration + GetPifs ();
1974
0d6b3bead74a replace cassert by ns3/assert.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
  1888
      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
  1889
      NotifyAckTimeoutStartNow (timerDelay);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1890
      m_superFastAckTimeoutEvent = Simulator::Schedule (timerDelay,
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1891
                                                        &MacLow::SuperFastAckTimeout, this);
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1892
    }
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1893
  else if (m_txParams.MustWaitBasicBlockAck ())
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1894
    {
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1895
      Time timerDelay = txDuration + GetBasicBlockAckTimeout ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1896
      NS_ASSERT (m_blockAckTimeoutEvent.IsExpired ());
11033
2198f9c998cc bug 1970: Missing NotifyAckTimeoutStartNow in MacLow::StartDataTxTimers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 10968
diff changeset
  1897
      NotifyAckTimeoutStartNow (timerDelay);
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1898
      m_blockAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::BlockAckTimeout, this);
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1899
    }
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1900
  else if (m_txParams.MustWaitCompressedBlockAck ())
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1901
    {
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1902
      Time timerDelay = txDuration + GetCompressedBlockAckTimeout ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1903
      NS_ASSERT (m_blockAckTimeoutEvent.IsExpired ());
11033
2198f9c998cc bug 1970: Missing NotifyAckTimeoutStartNow in MacLow::StartDataTxTimers
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 10968
diff changeset
  1904
      NotifyAckTimeoutStartNow (timerDelay);
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1905
      m_blockAckTimeoutEvent = Simulator::Schedule (timerDelay, &MacLow::BlockAckTimeout, this);
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
  1906
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1907
  else if (m_txParams.HasNextPacket ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1908
    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1909
      if (m_stationManager->HasHtSupported ())
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1910
        {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1911
          Time delay = txDuration + GetRifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1912
          NS_ASSERT (m_waitRifsEvent.IsExpired ());
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1913
          m_waitRifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTx, this);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1914
        }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1915
      else
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1916
        {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1917
          Time delay = txDuration + GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1918
          NS_ASSERT (m_waitSifsEvent.IsExpired ());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1919
          m_waitSifsEvent = Simulator::Schedule (delay, &MacLow::WaitSifsAfterEndTx, this);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1920
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1921
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1922
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1923
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1924
      // since we do not expect any timer to be triggered.
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1925
      Simulator::Schedule (txDuration, &MacLow::EndTxNoAck, this);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1926
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1927
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1928
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1929
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1930
MacLow::SendDataPacket (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1931
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  1932
  NS_LOG_FUNCTION (this);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1933
  /* send this packet directly. No RTS is needed. */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1934
  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1935
  WifiPreamble preamble;
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1936
  if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1937
    {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1938
      preamble = WIFI_PREAMBLE_VHT;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1939
    }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  1940
  else if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1941
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1942
      //In the future has to make sure that receiver has greenfield enabled
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1943
      preamble = WIFI_PREAMBLE_HT_GF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1944
    }
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1945
  else if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1946
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1947
      preamble = WIFI_PREAMBLE_HT_MF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1948
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1949
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1950
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1951
      preamble = WIFI_PREAMBLE_LONG;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1952
    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  1953
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1954
  StartDataTxTimers (dataTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1955
2163
03fe5e8740dc fix a small style issue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2159
diff changeset
  1956
  Time duration = Seconds (0.0);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1957
  if (m_txParams.HasDurationId ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1958
    {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1959
      duration += m_txParams.GetDurationId ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1960
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1961
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1962
    {
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1963
      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
  1964
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1965
          duration += GetSifs ();
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1966
          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1967
          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), 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
  1968
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1969
      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
  1970
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  1971
          duration += GetSifs ();
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  1972
          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1973
          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), 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
  1974
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1975
      else if (m_txParams.MustWaitAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1976
        {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1977
          duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1978
          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1979
        }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1980
      if (m_txParams.HasNextPacket ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1981
        {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1982
          duration += GetSifs ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1983
          duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  1984
                                                  dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  1985
          if (m_txParams.MustWaitAck ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1986
            {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1987
              duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  1988
              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1989
            }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1990
        }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1991
    }
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  1992
  m_currentHdr.SetDuration (duration);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1993
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1994
  if (!m_ampdu)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1995
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1996
      m_currentPacket->AddHeader (m_currentHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1997
      WifiMacTrailer fcs;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1998
      m_currentPacket->AddTrailer (fcs);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  1999
    }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2000
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2001
  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
  2002
  m_currentPacket = 0;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2003
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2004
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2005
bool
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2088
diff changeset
  2006
MacLow::IsNavZero (void) const
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2007
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2008
  if (m_lastNavStart + m_lastNavDuration < Simulator::Now ())
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2009
    {
2172
eb1adef495b6 the bool check was inverted. reported by Federico Maguolo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2163
diff changeset
  2010
      return true;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2011
    }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2012
  else
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2013
    {
2172
eb1adef495b6 the bool check was inverted. reported by Federico Maguolo.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2163
diff changeset
  2014
      return false;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2015
    }
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2016
}
11420
ef4dc0386e71 postfix for commit 11384:935dc1cc08a4
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11398
diff changeset
  2017
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2018
void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2019
MacLow::SendCtsToSelf (void)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2020
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2021
  WifiMacHeader cts;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2022
  cts.SetType (WIFI_MAC_CTL_CTS);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2023
  cts.SetDsNotFrom ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2024
  cts.SetDsNotTo ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2025
  cts.SetNoMoreFragments ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2026
  cts.SetNoRetry ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2027
  cts.SetAddr1 (m_self);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2028
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2029
  WifiTxVector ctsTxVector = GetCtsToSelfTxVector (m_currentPacket, &m_currentHdr);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2030
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2031
  WifiPreamble preamble;
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2032
  if (ctsTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2033
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2034
      preamble = WIFI_PREAMBLE_HT_MF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2035
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2036
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2037
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2038
      preamble = WIFI_PREAMBLE_LONG;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2039
    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2040
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2041
  Time duration = Seconds (0);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2042
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2043
  if (m_txParams.HasDurationId ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2044
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2045
      duration += m_txParams.GetDurationId ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2046
    }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2047
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2048
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2049
      WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2050
      duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2051
      duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket,&m_currentHdr),
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2052
                                              dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2053
      if (m_txParams.MustWaitBasicBlockAck ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2054
        {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2055
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2056
          duration += GetSifs ();
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2057
          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2058
          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2059
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2060
      else if (m_txParams.MustWaitCompressedBlockAck ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2061
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2062
          duration += GetSifs ();
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2063
          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2064
          duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2065
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2066
      else if (m_txParams.MustWaitAck ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2067
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2068
          duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2069
          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2070
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2071
      if (m_txParams.HasNextPacket ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2072
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2073
          duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2074
          duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2075
                                                  dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2076
          if (m_txParams.MustWaitCompressedBlockAck ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2077
            {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2078
              duration += GetSifs ();
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2079
              WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2080
              duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2081
            }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2082
          else if (m_txParams.MustWaitAck ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2083
            {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2084
              duration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2085
              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2086
            }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2087
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2088
    }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2089
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2090
  cts.SetDuration (duration);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2091
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2092
  Ptr<Packet> packet = Create<Packet> ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2093
  packet->AddHeader (cts);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2094
  WifiMacTrailer fcs;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2095
  packet->AddTrailer (fcs);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2096
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2097
  ForwardDown (packet, &cts, ctsTxVector,preamble);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2098
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2099
  Time txDuration = m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble, m_phy->GetFrequency (), 0, 0);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2100
  txDuration += GetSifs ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2101
  NS_ASSERT (m_sendDataEvent.IsExpired ());
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2102
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2103
  m_sendDataEvent = Simulator::Schedule (txDuration,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2104
                                         &MacLow::SendDataAfterCts, this,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2105
                                         cts.GetAddr1 (),
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2106
                                         duration);
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2107
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2108
}
11420
ef4dc0386e71 postfix for commit 11384:935dc1cc08a4
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11398
diff changeset
  2109
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2110
void
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2111
MacLow::SendCtsAfterRts (Mac48Address source, Time duration, WifiTxVector rtsTxVector, double rtsSnr)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2112
{
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2113
  NS_LOG_FUNCTION (this << source << duration << rtsTxVector.GetMode () << rtsSnr);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2114
  /* send a CTS when you receive a RTS
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2115
   * right after SIFS.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2116
   */
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2117
  WifiTxVector ctsTxVector = GetCtsTxVector (source, rtsTxVector.GetMode ());
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2118
  WifiMacHeader cts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2119
  cts.SetType (WIFI_MAC_CTL_CTS);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2120
  cts.SetDsNotFrom ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2121
  cts.SetDsNotTo ();
2793
10a571d9a9f7 initialize no more fragment flag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2547
diff changeset
  2122
  cts.SetNoMoreFragments ();
3659
653395340b5c should set retry bit in rts and acks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3658
diff changeset
  2123
  cts.SetNoRetry ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2124
  cts.SetAddr1 (source);
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2125
  duration -= GetCtsDuration (source, rtsTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2126
  duration -= GetSifs ();
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  2127
  NS_ASSERT (duration >= MicroSeconds (0));
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  2128
  cts.SetDuration (duration);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2129
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  2130
  Ptr<Packet> packet = Create<Packet> ();
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  2131
  packet->AddHeader (cts);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2132
  WifiMacTrailer fcs;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  2133
  packet->AddTrailer (fcs);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2134
6341
375d70f07323 fixed bug 923
Quincy Tse <quincy.tse@gmail.com>
parents: 6331
diff changeset
  2135
  SnrTag tag;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2136
  tag.Set (rtsSnr);
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4264
diff changeset
  2137
  packet->AddPacketTag (tag);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2138
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2139
  ForwardDown (packet, &cts, ctsTxVector, WIFI_PREAMBLE_LONG);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2140
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2141
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2142
void
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2143
MacLow::SendDataAfterCts (Mac48Address source, Time duration)
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2144
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  2145
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2146
  /* send the third step in a
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2147
   * RTS/CTS/DATA/ACK hanshake
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2148
   */
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  2149
  NS_ASSERT (m_currentPacket != 0);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2150
  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2151
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  2152
  if (m_aggregateQueue->GetSize () != 0)
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  2153
    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2154
      for (std::vector<Item>::size_type i = 0; i != m_txPackets.size (); i++)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2155
        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2156
          uint8_t tid = GetTid (m_txPackets.at (i).packet, m_txPackets.at (i).hdr);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2157
          AcIndex ac = QosUtilsMapTidToAc (tid);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2158
          std::map<AcIndex, MacLowAggregationCapableTransmissionListener*>::const_iterator listenerIt = m_edcaListeners.find (ac);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2159
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2160
          listenerIt->second->CompleteMpduTx (m_txPackets.at (i).packet, m_txPackets.at (i).hdr, m_txPackets.at (i).timestamp);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2161
        }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2162
      m_txPackets.clear ();
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  2163
    }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2164
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2165
  WifiPreamble preamble;
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2166
  if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2167
    {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2168
      preamble = WIFI_PREAMBLE_VHT;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2169
    }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2170
  else if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2171
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2172
      //In the future has to make sure that receiver has greenfield enabled
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2173
      preamble = WIFI_PREAMBLE_HT_GF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2174
    }
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2175
  else if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2176
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2177
      preamble = WIFI_PREAMBLE_HT_MF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2178
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2179
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2180
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2181
      preamble = WIFI_PREAMBLE_LONG;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2182
    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2183
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2184
  StartDataTxTimers (dataTxVector);
2176
8a8305b75bed make sure we never set a negative duration
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2172
diff changeset
  2185
  Time newDuration = Seconds (0);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2186
  if (m_txParams.MustWaitBasicBlockAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2187
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2188
      newDuration += GetSifs ();
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2189
      WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2190
      newDuration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2191
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2192
  else if (m_txParams.MustWaitCompressedBlockAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2193
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2194
      newDuration += GetSifs ();
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2195
      WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2196
      newDuration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2197
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2198
  else if (m_txParams.MustWaitAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2199
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2200
      newDuration += GetSifs ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2201
      newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2202
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2203
  if (m_txParams.HasNextPacket ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2204
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2205
      newDuration += GetSifs ();
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2206
      newDuration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2207
      if (m_txParams.MustWaitCompressedBlockAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2208
        {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2209
          newDuration += GetSifs ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2210
          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2211
          newDuration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2212
        }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2213
      else if (m_txParams.MustWaitAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2214
        {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2215
          newDuration += GetSifs ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2216
          newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2217
        }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2218
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2219
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2220
  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2221
  duration -= txDuration;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2222
  duration -= GetSifs ();
2176
8a8305b75bed make sure we never set a negative duration
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2172
diff changeset
  2223
8a8305b75bed make sure we never set a negative duration
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2172
diff changeset
  2224
  duration = std::max (duration, newDuration);
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  2225
  NS_ASSERT (duration >= MicroSeconds (0));
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  2226
  m_currentHdr.SetDuration (duration);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2227
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2228
  if (!m_ampdu)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2229
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2230
      m_currentPacket->AddHeader (m_currentHdr);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2231
      WifiMacTrailer fcs;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2232
      m_currentPacket->AddTrailer (fcs);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2233
    }
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2234
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2235
  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
  2236
  m_currentPacket = 0;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2237
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2238
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2239
void
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2240
MacLow::WaitSifsAfterEndTx (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2241
{
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2242
  m_listener->StartNext ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2243
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2244
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2245
void
9176
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  2246
MacLow::EndTxNoAck (void)
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  2247
{
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  2248
  MacLowTransmissionListener *listener = m_listener;
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  2249
  m_listener = 0;
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  2250
  listener->EndTxNoAck ();
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  2251
}
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
  2252
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2253
void
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2254
MacLow::FastAckFailedTimeout (void)
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2255
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  2256
  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
  2257
  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
  2258
  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
  2259
  listener->MissedAck ();
4003
49a08376f196 bug 405: add more context to wifi logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3906
diff changeset
  2260
  NS_LOG_DEBUG ("fast Ack busy but missed");
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2261
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2262
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2263
void
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  2264
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
  2265
{
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2793
diff changeset
  2266
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2267
  /* send an ACK when you receive
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2268
   * a packet after SIFS.
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2269
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2270
  WifiTxVector ackTxVector = GetAckTxVector (source, dataTxMode);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2271
  WifiMacHeader ack;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2272
  ack.SetType (WIFI_MAC_CTL_ACK);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2273
  ack.SetDsNotFrom ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2274
  ack.SetDsNotTo ();
3658
f44b66348690 should set retry bit in acks.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3601
diff changeset
  2275
  ack.SetNoRetry ();
2793
10a571d9a9f7 initialize no more fragment flag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2547
diff changeset
  2276
  ack.SetNoMoreFragments ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2277
  ack.SetAddr1 (source);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2278
  duration -= GetAckDuration (ackTxVector);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2279
  duration -= GetSifs ();
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  2280
  NS_ASSERT (duration >= MicroSeconds (0));
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1996
diff changeset
  2281
  ack.SetDuration (duration);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2282
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  2283
  Ptr<Packet> packet = Create<Packet> ();
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  2284
  packet->AddHeader (ack);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2285
  WifiMacTrailer fcs;
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2147
diff changeset
  2286
  packet->AddTrailer (fcs);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2287
6341
375d70f07323 fixed bug 923
Quincy Tse <quincy.tse@gmail.com>
parents: 6331
diff changeset
  2288
  SnrTag tag;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2289
  tag.Set (dataSnr);
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4264
diff changeset
  2290
  packet->AddPacketTag (tag);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2291
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2292
  //ACK should always use non-HT PPDU (HT PPDU cases not supported yet)
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2293
  ForwardDown (packet, &ack, ackTxVector, WIFI_PREAMBLE_LONG);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2294
}
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  2295
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2296
bool
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2297
MacLow::IsInWindow (uint16_t seq, uint16_t winstart, uint16_t winsize)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2298
{
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2299
  return ((seq - winstart + 4096) % 4096) < winsize;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2300
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2301
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2302
bool
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2303
MacLow::ReceiveMpdu (Ptr<Packet> packet, WifiMacHeader hdr)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2304
{
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2305
  if (m_stationManager->HasHtSupported () || m_stationManager->HasVhtSupported ())
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2306
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2307
      Mac48Address originator = hdr.GetAddr2 ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2308
      uint8_t tid = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2309
      if (hdr.IsQosData ())
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2310
        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2311
          tid = hdr.GetQosTid ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2312
        }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2313
      uint16_t seqNumber = hdr.GetSequenceNumber ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2314
      AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid));
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2315
      if (it != m_bAckAgreements.end ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2316
        {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2317
          //Implement HT immediate Block Ack support for HT Delayed Block Ack is not added yet
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2318
          if (!QosUtilsIsOldPacket ((*it).second.first.GetStartingSequence (), seqNumber))
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2319
            {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2320
              StoreMpduIfNeeded (packet, hdr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2321
              if (!IsInWindow (hdr.GetSequenceNumber (), (*it).second.first.GetStartingSequence (), (*it).second.first.GetBufferSize ()))
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2322
                {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2323
                  uint16_t delta = (seqNumber - (*it).second.first.GetWinEnd () + 4096) % 4096;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2324
                  if (delta > 1)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2325
                    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2326
                      (*it).second.first.SetWinEnd (seqNumber);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2327
                      int16_t winEnd = (*it).second.first.GetWinEnd ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2328
                      int16_t bufferSize = (*it).second.first.GetBufferSize ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2329
                      uint16_t sum = ((uint16_t)(std::abs (winEnd - bufferSize + 1))) % 4096;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2330
                      (*it).second.first.SetStartingSequence (sum);
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2331
                      RxCompleteBufferedPacketsWithSmallerSequence ((*it).second.first.GetStartingSequenceControl (), originator, tid);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2332
                    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2333
                }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2334
              RxCompleteBufferedPacketsUntilFirstLost (originator, tid); //forwards up packets starting from winstart and set winstart to last +1
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2335
              (*it).second.first.SetWinEnd (((*it).second.first.GetStartingSequence () + (*it).second.first.GetBufferSize () - 1) % 4096);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2336
            }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2337
          return true;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2338
        }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2339
      return false;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2340
    }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2341
  else
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2342
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2343
      return StoreMpduIfNeeded (packet, hdr);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2344
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2345
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2346
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2347
bool
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2348
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
  2349
{
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2350
  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
  2351
  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
  2352
    {
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  2353
      WifiMacTrailer fcs;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  2354
      packet->RemoveTrailer (fcs);
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  2355
      BufferedPacket bufferedPacket (packet, hdr);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2356
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  2357
      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
  2358
      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
  2359
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  2360
      BufferedPacketI i = (*it).second.second.begin ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2361
      for (; i != (*it).second.second.end ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2362
           && QosUtilsMapSeqControlToUniqueInteger ((*i).second.GetSequenceControl (), endSequence) < mappedSeqControl; i++)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2363
        {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2364
        }
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  2365
      (*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
  2366
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
  2367
      //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
  2368
      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
  2369
      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
  2370
      (*j).second.UpdateWithMpdu (&hdr);
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  2371
      return true;
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  2372
    }
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2373
  return false;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2374
}
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2375
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2376
void
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2377
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
  2378
                                 uint16_t startingSeq)
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2379
{
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2380
  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
  2381
  BlockAckAgreement agreement (originator, tid);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2382
  if (respHdr->IsImmediateBlockAck ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2383
    {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2384
      agreement.SetImmediateBlockAck ();
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2385
    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2386
  else
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2387
    {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2388
      agreement.SetDelayedBlockAck ();
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2389
    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2390
  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
  2391
  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
  2392
  agreement.SetTimeout (respHdr->GetTimeout ());
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2393
  agreement.SetStartingSequence (startingSeq);
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  2394
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2395
  std::list<BufferedPacket> buffer (0);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2396
  AgreementKey key (originator, respHdr->GetTid ());
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2397
  AgreementValue value (agreement, buffer);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2398
  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
  2399
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
  2400
  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
  2401
  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
  2402
  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
  2403
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2404
  if (respHdr->GetTimeout () != 0)
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2405
    {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2406
      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
  2407
      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
  2408
6331
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6304
diff changeset
  2409
      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
  2410
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2411
      it->second.first.m_inactivityEvent = Simulator::Schedule (timeout,
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  2412
                                                                &MacLowAggregationCapableTransmissionListener::BlockAckInactivityTimeout,
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2413
                                                                m_edcaListeners[ac],
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2414
                                                                originator, tid);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2415
    }
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2416
}
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2417
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2418
void
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2419
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
  2420
{
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2421
  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
  2422
  if (it != m_bAckAgreements.end ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2423
    {
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2424
      RxCompleteBufferedPacketsWithSmallerSequence (it->second.first.GetStartingSequenceControl (), originator, tid);
6599
8c1a255c05a3 Rename MacLow::RxCompleteBufferedPacket to a more appropriate name
Mirko Banchi <mk.banchi@gmail.com>
parents: 6595
diff changeset
  2425
      RxCompleteBufferedPacketsUntilFirstLost (originator, tid);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2426
      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
  2427
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
  2428
      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
  2429
      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
  2430
      m_bAckCaches.erase (i);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2431
    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2432
}
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2433
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2434
void
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2435
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
  2436
{
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2437
  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
  2438
  if (it != m_bAckAgreements.end ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2439
    {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2440
      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
  2441
      uint16_t mappedStart = QosUtilsMapSeqControlToUniqueInteger (seq, endSequence);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2442
      BufferedPacketI last = (*it).second.second.begin ();
11188
e010083f6592 fix possibly uninitialized variable warning
Tom Henderson <tomh@tomh.org>
parents: 11174
diff changeset
  2443
      uint16_t guard = 0;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2444
      if (last != (*it).second.second.end ())
11188
e010083f6592 fix possibly uninitialized variable warning
Tom Henderson <tomh@tomh.org>
parents: 11174
diff changeset
  2445
        {
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2446
          guard = (*it).second.second.begin ()->second.GetSequenceControl ();
11188
e010083f6592 fix possibly uninitialized variable warning
Tom Henderson <tomh@tomh.org>
parents: 11174
diff changeset
  2447
        }
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2448
      BufferedPacketI i = (*it).second.second.begin ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2449
      for (; i != (*it).second.second.end ()
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2450
           && QosUtilsMapSeqControlToUniqueInteger ((*i).second.GetSequenceControl (), endSequence) < mappedStart; )
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2451
        {
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2452
          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
  2453
            {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2454
              if (!(*i).second.IsMoreFragments ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2455
                {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2456
                  while (last != i)
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2457
                    {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2458
                      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
  2459
                      last++;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2460
                    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2461
                  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
  2462
                  last++;
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2463
                  /* go to next packet */
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2464
                  while (i != (*it).second.second.end () && guard == (*i).second.GetSequenceControl ())
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2465
                    {
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2466
                      i++;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2467
                    }
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2468
                  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
  2469
                    {
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2470
                      guard = (*i).second.GetSequenceControl ();
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2471
                      last = i;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2472
                    }
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2473
                }
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2474
              else
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2475
                {
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2476
                  guard++;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2477
                }
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2478
            }
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2479
          else
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2480
            {
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2481
              /* go to next packet */
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2482
              while (i != (*it).second.second.end () && guard == (*i).second.GetSequenceControl ())
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2483
                {
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2484
                  i++;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2485
                }
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2486
              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
  2487
                {
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2488
                  guard = (*i).second.GetSequenceControl ();
6304
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2489
                  last = i;
645b4e644c12 bug 842: ns-3-dev crashes using block ack (fixed)
Mirko Banchi <mk.banchi@gmail.com>
parents: 6068
diff changeset
  2490
                }
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2491
            }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2492
        }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2493
      (*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
  2494
    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2495
}
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2496
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2497
void
6599
8c1a255c05a3 Rename MacLow::RxCompleteBufferedPacket to a more appropriate name
Mirko Banchi <mk.banchi@gmail.com>
parents: 6595
diff changeset
  2498
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
  2499
{
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2500
  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
  2501
  if (it != m_bAckAgreements.end ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2502
    {
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2503
      uint16_t guard = (*it).second.first.GetStartingSequenceControl ();
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2504
      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
  2505
      BufferedPacketI i = (*it).second.second.begin ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2506
      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
  2507
        {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2508
          if (!(*i).second.IsMoreFragments ())
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2509
            {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2510
              while (lastComplete != i)
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2511
                {
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2512
                  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
  2513
                  lastComplete++;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2514
                }
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6592
diff changeset
  2515
              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
  2516
              lastComplete++;
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2517
            }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2518
          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
  2519
        }
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2520
      (*it).second.first.SetStartingSequenceControl (guard);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2521
      /* 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
  2522
      [begin (), lastComplete) */
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2523
      (*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
  2524
    }
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
  2525
}
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2526
void
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2527
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
  2528
                              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
  2529
{
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2530
  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
  2531
  packet->AddHeader (*blockAck);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2532
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2533
  WifiMacHeader hdr;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2534
  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
  2535
  hdr.SetAddr1 (originator);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2536
  hdr.SetAddr2 (GetAddress ());
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2537
  hdr.SetDsNotFrom ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2538
  hdr.SetDsNotTo ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2539
  hdr.SetNoRetry ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2540
  hdr.SetNoMoreFragments ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2541
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2542
  WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (originator, blockAckReqTxMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2543
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2544
  m_currentPacket = packet;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2545
  m_currentHdr = hdr;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2546
  if (immediate)
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2547
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2548
      m_txParams.DisableAck ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2549
      duration -= GetSifs ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2550
      if (blockAck->IsBasic ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2551
        {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2552
          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
  2553
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2554
      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
  2555
        {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2556
          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
  2557
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2558
      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
  2559
        {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2560
          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
  2561
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2562
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2563
  else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2564
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2565
      m_txParams.EnableAck ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2566
      duration += GetSifs ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2567
      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
  2568
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2569
  m_txParams.DisableNextData ();
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2570
9238
e6c89f14f09b Prevent EndTxNoAck after sending a Block ACK response
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9234
diff changeset
  2571
  if (!immediate)
e6c89f14f09b Prevent EndTxNoAck after sending a Block ACK response
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9234
diff changeset
  2572
    {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2573
      StartDataTxTimers (blockAckReqTxVector);
9238
e6c89f14f09b Prevent EndTxNoAck after sending a Block ACK response
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9234
diff changeset
  2574
    }
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2575
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2576
  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
  2577
  hdr.SetDuration (duration);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2578
  //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
  2579
  //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
  2580
  packet->AddHeader (hdr);
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2581
  WifiMacTrailer fcs;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2582
  packet->AddTrailer (fcs);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2583
  WifiPreamble preamble;
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2584
  if (blockAckReqTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2585
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2586
      preamble = WIFI_PREAMBLE_HT_MF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2587
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9894
diff changeset
  2588
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2589
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2590
      preamble = WIFI_PREAMBLE_LONG;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2591
    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2592
  ForwardDown (packet, &hdr, blockAckReqTxVector, preamble);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2593
  m_currentPacket = 0;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2594
}
11420
ef4dc0386e71 postfix for commit 11384:935dc1cc08a4
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11398
diff changeset
  2595
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2596
void
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2597
MacLow::SendBlockAckAfterAmpdu (uint8_t tid, Mac48Address originator, Time duration, WifiTxVector blockAckReqTxVector)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2598
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2599
  NS_LOG_FUNCTION (this);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2600
  CtrlBAckResponseHeader blockAck;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2601
  uint16_t seqNumber = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2602
  BlockAckCachesI i = m_bAckCaches.find (std::make_pair (originator, tid));
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2603
  NS_ASSERT (i != m_bAckCaches.end ());
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2604
  seqNumber = (*i).second.GetWinStart ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2605
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2606
  bool immediate = true;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2607
  AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid));
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2608
  blockAck.SetStartingSequence (seqNumber);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2609
  blockAck.SetTidInfo (tid);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2610
  immediate = (*it).second.first.IsImmediateBlockAck ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2611
  blockAck.SetType (COMPRESSED_BLOCK_ACK);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2612
  NS_LOG_DEBUG ("Got Implicit block Ack Req with seq " << seqNumber);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2613
  (*i).second.FillBlockAckBitmap (&blockAck);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2614
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2615
  SendBlockAckResponse (&blockAck, originator, immediate, duration, blockAckReqTxVector.GetMode  ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2616
}
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2617
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2618
void
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2619
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
  2620
                                          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
  2621
{
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2622
  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
  2623
  CtrlBAckResponseHeader blockAck;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2624
  uint8_t tid = 0;
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2625
  bool immediate = false;
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2626
  if (!reqHdr.IsMultiTid ())
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2627
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2628
      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
  2629
      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
  2630
      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
  2631
        {
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
  2632
          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
  2633
          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
  2634
          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
  2635
          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
  2636
            {
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
  2637
              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
  2638
            }
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
  2639
          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
  2640
            {
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
  2641
              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
  2642
            }
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
  2643
          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
  2644
          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
  2645
          (*i).second.FillBlockAckBitmap (&blockAck);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2646
          NS_LOG_DEBUG ("Got block Ack Req with seq " << reqHdr.GetStartingSequence ());
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2647
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2648
          if (!m_stationManager->HasHtSupported () && !m_stationManager->HasVhtSupported ())
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2649
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2650
              /* All packets with smaller sequence than starting sequence control must be passed up to Wifimac
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2651
               * See 9.10.3 in IEEE 802.11e standard.
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2652
               */
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2653
              RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequenceControl (), originator, tid);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2654
              RxCompleteBufferedPacketsUntilFirstLost (originator, tid);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2655
            }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2656
          else
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2657
            {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2658
              if (!QosUtilsIsOldPacket ((*it).second.first.GetStartingSequence (), reqHdr.GetStartingSequence ()))
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2659
                {
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2660
                  (*it).second.first.SetStartingSequence (reqHdr.GetStartingSequence ());
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2661
                  (*it).second.first.SetWinEnd (((*it).second.first.GetStartingSequence () + (*it).second.first.GetBufferSize () - 1) % 4096);
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
  2662
                  RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequenceControl (), originator, tid);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2663
                  RxCompleteBufferedPacketsUntilFirstLost (originator, tid);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2664
                  (*it).second.first.SetWinEnd (((*it).second.first.GetStartingSequence () + (*it).second.first.GetBufferSize () - 1) % 4096);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2665
                }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2666
            }
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2667
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2668
      else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2669
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2670
          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
  2671
        }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2672
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2673
  else
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2674
    {
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2675
      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
  2676
    }
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2677
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2678
  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
  2679
}
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
  2680
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2681
void
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2682
MacLow::ResetBlockAckInactivityTimerIfNeeded (BlockAckAgreement &agreement)
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2683
{
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2684
  if (agreement.GetTimeout () != 0)
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2685
    {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2686
      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
  2687
      agreement.m_inactivityEvent.Cancel ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2688
      Time timeout = MicroSeconds (1024 * agreement.GetTimeout ());
6331
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6304
diff changeset
  2689
      AcIndex ac = QosUtilsMapTidToAc (agreement.GetTid ());
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7045
diff changeset
  2690
      agreement.m_inactivityEvent = Simulator::Schedule (timeout,
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  2691
                                                         &MacLowAggregationCapableTransmissionListener::BlockAckInactivityTimeout,
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2692
                                                         m_edcaListeners[ac],
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2693
                                                         agreement.GetPeer (),
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2694
                                                         agreement.GetTid ());
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2695
    }
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2696
}
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2697
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2698
void
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  2699
MacLow::RegisterBlockAckListenerForAc (enum AcIndex ac, MacLowAggregationCapableTransmissionListener *listener)
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2700
{
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2701
  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
  2702
}
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  2703
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2704
void
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2705
MacLow::SetMpduAggregator (Ptr<MpduAggregator> aggregator)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2706
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2707
  m_mpduAggregator = aggregator;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2708
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2709
11621
5560c057c54a Fix issue when a normal data packet is sent between A-MPDUs
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11614
diff changeset
  2710
Ptr<MpduAggregator>
5560c057c54a Fix issue when a normal data packet is sent between A-MPDUs
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11614
diff changeset
  2711
MacLow::GetMpduAggregator (void)
5560c057c54a Fix issue when a normal data packet is sent between A-MPDUs
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11614
diff changeset
  2712
{
5560c057c54a Fix issue when a normal data packet is sent between A-MPDUs
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11614
diff changeset
  2713
  return m_mpduAggregator;
5560c057c54a Fix issue when a normal data packet is sent between A-MPDUs
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11614
diff changeset
  2714
}
5560c057c54a Fix issue when a normal data packet is sent between A-MPDUs
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11614
diff changeset
  2715
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2716
void
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2717
MacLow::DeaggregateAmpduAndReceive (Ptr<Packet> aggregatedPacket, double rxSnr, WifiTxVector txVector, WifiPreamble preamble)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2718
{
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2719
  m_currentTxVector = txVector;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2720
  AmpduTag ampdu;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2721
  bool normalAck = false;
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2722
  bool ampduSubframe = false; //flag indicating the packet belongs to an A-MPDU and is not a VHT single MPDU
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2723
  if (aggregatedPacket->RemovePacketTag (ampdu))
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2724
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2725
      ampduSubframe = true;
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2726
      MpduAggregator::DeaggregatedMpdus packets = MpduAggregator::Deaggregate (aggregatedPacket);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2727
      MpduAggregator::DeaggregatedMpdusCI n = packets.begin ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2728
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2729
      WifiMacHeader firsthdr;
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2730
      (*n).first->PeekHeader (firsthdr);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2731
      NS_LOG_DEBUG ("duration/id=" << firsthdr.GetDuration ());
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2732
      NotifyNav ((*n).first, firsthdr, preamble);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2733
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2734
      bool vhtSingleMpdu = (*n).second.GetEof ();
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2735
      if (vhtSingleMpdu == true)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2736
        {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2737
          //If the MPDU is sent as a VHT single MPDU (EOF=1 in A-MPDU subframe header), then the responder sends an ACK.
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2738
          NS_LOG_DEBUG ("Receive VHT single MPDU");
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2739
          ampduSubframe = false;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2740
        }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2741
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2742
      if (firsthdr.GetAddr1 () == m_self)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2743
        {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2744
          m_receivedAtLeastOneMpdu = true;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2745
          if (firsthdr.IsAck () || firsthdr.IsBlockAck () || firsthdr.IsBlockAckReq ())
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2746
            {
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2747
              ReceiveOk ((*n).first, rxSnr, txVector, preamble, ampduSubframe);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2748
            }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2749
          else if (firsthdr.IsData () || firsthdr.IsQosData ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2750
            {
11614
50d7bddfc00b add missing condition in mac-low
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11543
diff changeset
  2751
              NS_LOG_DEBUG ("Deaggregate packet from " << firsthdr.GetAddr2 () << " with sequence=" << firsthdr.GetSequenceNumber ());
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2752
              ReceiveOk ((*n).first, rxSnr, txVector, preamble, ampduSubframe);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2753
              if (firsthdr.IsQosAck ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2754
                {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2755
                  NS_LOG_DEBUG ("Normal Ack");
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2756
                  normalAck = true;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2757
                }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2758
            }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2759
          else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2760
            {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2761
              NS_FATAL_ERROR ("Received A-MPDU with invalid first MPDU type");
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2762
            }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2763
        }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2764
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2765
      if (normalAck && (ampdu.GetNoOfMpdus () == 1) && !vhtSingleMpdu)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2766
        {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2767
          //send block Ack
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2768
          if (firsthdr.IsBlockAckReq ())
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2769
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2770
              NS_FATAL_ERROR ("Sending a BlockAckReq with QosPolicy equal to Normal Ack");
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2771
            }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2772
          uint8_t tid = firsthdr.GetQosTid ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2773
          AgreementsI it = m_bAckAgreements.find (std::make_pair (firsthdr.GetAddr2 (), tid));
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2774
          if (it != m_bAckAgreements.end ())
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2775
            {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2776
              NS_ASSERT (m_sendAckEvent.IsExpired ());
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2777
              /* See section 11.5.3 in IEEE 802.11 for mean of this timer */
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2778
              ResetBlockAckInactivityTimerIfNeeded (it->second.first);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2779
              NS_LOG_DEBUG ("rx A-MPDU/sendImmediateBlockAck from=" << firsthdr.GetAddr2 ());
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2780
              m_sendAckEvent = Simulator::Schedule (GetSifs (),
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2781
                                                    &MacLow::SendBlockAckAfterAmpdu, this,
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2782
                                                    firsthdr.GetQosTid (),
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2783
                                                    firsthdr.GetAddr2 (),
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2784
                                                    firsthdr.GetDuration (),
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11360
diff changeset
  2785
                                                    txVector);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2786
            }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2787
          else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2788
            {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2789
              NS_LOG_DEBUG ("There's not a valid agreement for this block ack request.");
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2790
            }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2791
          m_receivedAtLeastOneMpdu = false;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2792
        }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2793
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2794
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2795
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2796
      ReceiveOk (aggregatedPacket, rxSnr, txVector, preamble, ampduSubframe);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2797
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2798
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2799
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2800
bool
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2801
MacLow::StopMpduAggregation (Ptr<const Packet> peekedPacket, WifiMacHeader peekedHdr, Ptr<Packet> aggregatedPacket, uint16_t size) const
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2802
{
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2803
  WifiPreamble preamble;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2804
  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2805
  if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2806
    {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2807
      preamble = WIFI_PREAMBLE_VHT;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2808
    }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2809
  else if (m_phy->GetGreenfield () && m_stationManager->GetGreenfieldSupported (m_currentHdr.GetAddr1 ()))
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2810
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2811
      preamble = WIFI_PREAMBLE_HT_GF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2812
    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2813
  else if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2814
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2815
      preamble = WIFI_PREAMBLE_HT_MF;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2816
    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2817
  else
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2818
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2819
      preamble = WIFI_PREAMBLE_LONG;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2820
    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2821
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2822
  if (peekedPacket == 0)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2823
    {
11621
5560c057c54a Fix issue when a normal data packet is sent between A-MPDUs
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11614
diff changeset
  2824
      NS_LOG_DEBUG ("no more packets in queue");
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2825
      return true;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2826
    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2827
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2828
  //An HT STA shall not transmit a PPDU that has a duration that is greater than aPPDUMaxTime (10 milliseconds)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2829
  if (m_phy->CalculateTxDuration (aggregatedPacket->GetSize () + peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, dataTxVector, preamble, m_phy->GetFrequency (), 0, 0) > MilliSeconds (10))
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2830
    {
11621
5560c057c54a Fix issue when a normal data packet is sent between A-MPDUs
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11614
diff changeset
  2831
      NS_LOG_DEBUG ("no more packets can be aggregated to satisfy PPDU <= aPPDUMaxTime");
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2832
      return true;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2833
    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2834
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2835
  if (!m_mpduAggregator->CanBeAggregated (peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, aggregatedPacket, size))
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2836
    {
11621
5560c057c54a Fix issue when a normal data packet is sent between A-MPDUs
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11614
diff changeset
  2837
      NS_LOG_DEBUG ("no more packets can be aggregated because the maximum A-MPDU size has been reached");
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2838
      return true;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2839
    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2840
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2841
  return false;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2842
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2843
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2844
Ptr<Packet>
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2845
MacLow::AggregateToAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2846
{
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2847
  NS_ASSERT (m_aggregateQueue->GetSize () == 0);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2848
  bool isAmpdu = false;
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  2849
  Ptr<Packet> newPacket, tempPacket;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2850
  WifiMacHeader peekedHdr;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2851
  newPacket = packet->Copy ();
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2852
  Ptr<Packet> currentAggregatedPacket;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2853
  //missing hdr.IsAck() since we have no means of knowing the Tid of the Ack yet
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2854
  if (hdr.IsQosData () || hdr.IsBlockAck ()|| hdr.IsBlockAckReq ())
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2855
    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2856
      Time tstamp;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2857
      uint8_t tid = GetTid (packet, hdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2858
      Ptr<WifiMacQueue> queue;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2859
      AcIndex ac = QosUtilsMapTidToAc (tid);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2860
      //since a blockack agreement always preceeds mpdu aggregation there should always exist blockAck listener
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2861
      std::map<AcIndex, MacLowAggregationCapableTransmissionListener*>::const_iterator listenerIt = m_edcaListeners.find (ac);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2862
      NS_ASSERT (listenerIt != m_edcaListeners.end ());
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2863
      queue = listenerIt->second->GetQueue ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2864
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2865
      if (!hdr.GetAddr1 ().IsBroadcast () && m_mpduAggregator != 0)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2866
        {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2867
          //Have to make sure that their exist a block Ack agreement before sending an AMPDU (BlockAck Manager)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2868
          if (listenerIt->second->GetBlockAckAgreementExists (hdr.GetAddr1 (), tid))
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2869
            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2870
              /* here is performed mpdu aggregation */
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2871
              /* MSDU aggregation happened in edca if the user asked for it so m_currentPacket may contains a normal packet or a A-MSDU*/
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  2872
              currentAggregatedPacket = Create<Packet> ();
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2873
              peekedHdr = hdr;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2874
              uint16_t startingSequenceNumber = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2875
              uint16_t currentSequenceNumber = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2876
              uint8_t qosPolicy = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2877
              uint16_t blockAckSize = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2878
              bool aggregated = false;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2879
              int i = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2880
              Ptr<Packet> aggPacket = newPacket->Copy ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2881
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2882
              if (!hdr.IsBlockAckReq ())
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2883
                {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2884
                  if (!hdr.IsBlockAck ())
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2885
                    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2886
                      startingSequenceNumber = peekedHdr.GetSequenceNumber ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2887
                      peekedHdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2888
                    }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2889
                  currentSequenceNumber = peekedHdr.GetSequenceNumber ();
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2890
                  newPacket->AddHeader (peekedHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2891
                  WifiMacTrailer fcs;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2892
                  newPacket->AddTrailer (fcs);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2893
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2894
                  aggregated = m_mpduAggregator->Aggregate (newPacket, currentAggregatedPacket);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2895
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2896
                  if (aggregated)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2897
                    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2898
                      NS_LOG_DEBUG ("Adding packet with Sequence number " << peekedHdr.GetSequenceNumber () << " to A-MPDU, packet size = " << newPacket->GetSize () << ", A-MPDU size = " << currentAggregatedPacket->GetSize ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2899
                      i++;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2900
                      m_sentMpdus++;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2901
                      m_aggregateQueue->Enqueue (aggPacket, peekedHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2902
                    }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2903
                }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2904
              else if (hdr.IsBlockAckReq ())
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2905
                {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2906
                  blockAckSize = packet->GetSize () + hdr.GetSize () + WIFI_MAC_FCS_LENGTH;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2907
                  qosPolicy = 3; //if the last subrame is block ack req then set ack policy of all frames to blockack
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2908
                  CtrlBAckRequestHeader blockAckReq;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2909
                  packet->PeekHeader (blockAckReq);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2910
                  startingSequenceNumber = blockAckReq.GetStartingSequence ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2911
                }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2912
              aggregated = false;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2913
              bool retry = false;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2914
              //looks for other packets to the same destination with the same Tid need to extend that to include MSDUs
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2915
              Ptr<const Packet> peekedPacket = listenerIt->second->PeekNextPacketInBaQueue (peekedHdr, peekedHdr.GetAddr1 (), tid, &tstamp);
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  2916
              if (peekedPacket == 0)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2917
                {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2918
                  peekedPacket = queue->PeekByTidAndAddress (&peekedHdr, tid,
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2919
                                                             WifiMacHeader::ADDR1,
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2920
                                                             hdr.GetAddr1 (), &tstamp);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2921
                  currentSequenceNumber = listenerIt->second->PeekNextSequenceNumberfor (&peekedHdr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2922
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  2923
                  /* here is performed MSDU aggregation (two-level aggregation) */
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  2924
                  if (peekedPacket != 0 && listenerIt->second->GetMsduAggregator () != 0)
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  2925
                    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2926
                      tempPacket = PerformMsduAggregation (peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, blockAckSize);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2927
                      if (tempPacket != 0)  //MSDU aggregation
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2928
                        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2929
                          peekedPacket = tempPacket->Copy ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2930
                        }
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  2931
                    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2932
                }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2933
              else
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2934
                {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2935
                  retry = true;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2936
                  currentSequenceNumber = peekedHdr.GetSequenceNumber ();
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2937
                }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2938
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2939
              while (IsInWindow (currentSequenceNumber, startingSequenceNumber, 64) && !StopMpduAggregation (peekedPacket, peekedHdr, currentAggregatedPacket, blockAckSize))
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2940
                {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2941
                  //for now always send AMPDU with normal ACK
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2942
                  if (retry == false)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2943
                    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2944
                      currentSequenceNumber = listenerIt->second->GetNextSequenceNumberfor (&peekedHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2945
                      peekedHdr.SetSequenceNumber (currentSequenceNumber);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2946
                      peekedHdr.SetFragmentNumber (0);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2947
                      peekedHdr.SetNoMoreFragments ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2948
                      peekedHdr.SetNoRetry ();
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2949
                    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2950
                  if (qosPolicy == 0)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2951
                    {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2952
                      peekedHdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2953
                    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2954
                  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2955
                    {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2956
                      peekedHdr.SetQosAckPolicy (WifiMacHeader::BLOCK_ACK);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2957
                    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2958
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2959
                  newPacket = peekedPacket->Copy ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2960
                  Ptr<Packet> aggPacket = newPacket->Copy ();
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2961
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2962
                  newPacket->AddHeader (peekedHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2963
                  WifiMacTrailer fcs;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2964
                  newPacket->AddTrailer (fcs);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2965
                  aggregated = m_mpduAggregator->Aggregate (newPacket, currentAggregatedPacket);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2966
                  if (aggregated)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2967
                    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2968
                      m_aggregateQueue->Enqueue (aggPacket, peekedHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2969
                      if (i == 1 && hdr.IsQosData ())
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  2970
                        {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2971
                          if (!m_txParams.MustSendRts ())
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2972
                            {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2973
                              listenerIt->second->CompleteMpduTx (packet, hdr, tstamp);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2974
                            }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2975
                          else
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2976
                            {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2977
                              InsertInTxQueue (packet, hdr, tstamp);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2978
                            }
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  2979
                        }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2980
                      NS_LOG_DEBUG ("Adding packet with Sequence number " << peekedHdr.GetSequenceNumber () << " to A-MPDU, packet size = " << newPacket->GetSize () << ", A-MPDU size = " << currentAggregatedPacket->GetSize ());
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2981
                      i++;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2982
                      isAmpdu = true;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2983
                      m_sentMpdus++;
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  2984
                      if (!m_txParams.MustSendRts ())
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2985
                        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2986
                          listenerIt->second->CompleteMpduTx (peekedPacket, peekedHdr, tstamp);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2987
                        }
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  2988
                      else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2989
                        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2990
                          InsertInTxQueue (peekedPacket, peekedHdr, tstamp);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2991
                        }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2992
                      if (retry)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2993
                        {
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  2994
                          listenerIt->second->RemoveFromBaQueue (tid, hdr.GetAddr1 (), peekedHdr.GetSequenceNumber ());
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2995
                        }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2996
                      else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2997
                        {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  2998
                          queue->Remove (peekedPacket);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  2999
                        }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3000
                      newPacket = 0;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3001
                    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3002
                  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3003
                    {
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3004
                      break;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3005
                    }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3006
                  if (retry == true)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3007
                    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3008
                      peekedPacket = listenerIt->second->PeekNextPacketInBaQueue (peekedHdr, hdr.GetAddr1 (), tid, &tstamp);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3009
                      if (peekedPacket == 0)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3010
                        {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3011
                          //I reached the first packet that I added to this A-MPDU
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3012
                          retry = false;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3013
                          peekedPacket = queue->PeekByTidAndAddress (&peekedHdr, tid,
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3014
                                                                     WifiMacHeader::ADDR1, hdr.GetAddr1 (), &tstamp);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3015
                          if (peekedPacket != 0)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3016
                            {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3017
                              //find what will the sequence number be so that we don't send more than 64 packets apart
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3018
                              currentSequenceNumber = listenerIt->second->PeekNextSequenceNumberfor (&peekedHdr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3019
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3020
                              if (listenerIt->second->GetMsduAggregator () != 0)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3021
                                {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3022
                                  tempPacket = PerformMsduAggregation (peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, blockAckSize);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3023
                                  if (tempPacket != 0) //MSDU aggregation
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3024
                                    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3025
                                      peekedPacket = tempPacket->Copy ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3026
                                    }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3027
                                }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3028
                            }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3029
                        }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3030
                      else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3031
                        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3032
                          currentSequenceNumber = peekedHdr.GetSequenceNumber ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3033
                        }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3034
                    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3035
                  else
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3036
                    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3037
                      peekedPacket = queue->PeekByTidAndAddress (&peekedHdr, tid,
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3038
                                                                 WifiMacHeader::ADDR1, hdr.GetAddr1 (), &tstamp);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3039
                      if (peekedPacket != 0)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3040
                        {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3041
                          //find what will the sequence number be so that we don't send more than 64 packets apart
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3042
                          currentSequenceNumber = listenerIt->second->PeekNextSequenceNumberfor (&peekedHdr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3043
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3044
                          if (listenerIt->second->GetMsduAggregator () != 0 && IsInWindow (currentSequenceNumber, startingSequenceNumber, 64))
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3045
                            {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3046
                              tempPacket = PerformMsduAggregation (peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, blockAckSize);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3047
                              if (tempPacket != 0) //MSDU aggregation
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3048
                                {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3049
                                  peekedPacket = tempPacket->Copy ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3050
                                }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3051
                            }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3052
                        }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3053
                    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3054
                }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3055
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3056
              if (isAmpdu)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3057
                {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3058
                  if (hdr.IsBlockAckReq ())
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3059
                    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3060
                      newPacket = packet->Copy ();
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3061
                      peekedHdr = hdr;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3062
                      Ptr<Packet> aggPacket = newPacket->Copy ();
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3063
                      m_aggregateQueue->Enqueue (aggPacket, peekedHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3064
                      newPacket->AddHeader (peekedHdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3065
                      WifiMacTrailer fcs;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3066
                      newPacket->AddTrailer (fcs);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3067
                      m_mpduAggregator->Aggregate (newPacket, currentAggregatedPacket);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3068
                    }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3069
                  if (qosPolicy == 0)
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3070
                    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3071
                      listenerIt->second->CompleteTransfer (hdr.GetAddr1 (), tid);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3072
                    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3073
                  //Add packet tag
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3074
                  AmpduTag ampdutag;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3075
                  ampdutag.SetAmpdu (true);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3076
                  ampdutag.SetNoOfMpdus (i);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3077
                  newPacket = currentAggregatedPacket;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3078
                  newPacket->AddPacketTag (ampdutag);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3079
                  NS_LOG_DEBUG ("tx unicast A-MPDU");
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3080
                  listenerIt->second->SetAmpdu (true);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3081
                }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3082
              else
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3083
                {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3084
                  uint32_t queueSize = m_aggregateQueue->GetSize ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3085
                  NS_ASSERT (queueSize <= 2); //since it is not an A-MPDU then only 2 packets should have been added to the queue no more
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3086
                  if (queueSize >= 1)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3087
                    {
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3088
                      //remove any packets that we added to the aggregate queue
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3089
                      FlushAggregateQueue ();
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3090
                    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3091
                }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3092
            }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3093
          //VHT single MPDU operation
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3094
          WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3095
          if (!isAmpdu && dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT && hdr.IsQosData ())
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3096
            {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3097
              peekedHdr = hdr;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3098
              peekedHdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3099
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3100
              currentAggregatedPacket = Create<Packet> ();
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3101
              m_mpduAggregator->AggregateVhtSingleMpdu (packet, currentAggregatedPacket);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3102
              m_aggregateQueue->Enqueue (packet, peekedHdr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3103
              m_sentMpdus = 1;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3104
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3105
              if (listenerIt->second->GetBlockAckAgreementExists (hdr.GetAddr1 (), tid))
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3106
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3107
                  listenerIt->second->CompleteTransfer (peekedHdr.GetAddr1 (), tid);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3108
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3109
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3110
              //Add packet tag
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3111
              AmpduTag ampdutag;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3112
              ampdutag.SetAmpdu (true);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3113
              ampdutag.SetNoOfMpdus (1);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3114
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3115
              newPacket = currentAggregatedPacket;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3116
              newPacket->AddHeader (peekedHdr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3117
              WifiMacTrailer fcs;
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3118
              newPacket->AddTrailer (fcs);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3119
              newPacket->AddPacketTag (ampdutag);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3120
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3121
              NS_LOG_DEBUG ("tx unicast VHT single MPDU with sequence number " << hdr.GetSequenceNumber ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3122
              listenerIt->second->SetAmpdu (true);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3123
            }
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3124
        }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3125
    }
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3126
  return newPacket;
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3127
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3128
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3129
void
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3130
MacLow::FlushAggregateQueue (void)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3131
{
11398
1c3de04836e3 remove tracing information about aggregate queue flushing when aggregate queue is empty
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
  3132
  if (m_aggregateQueue->GetSize () > 0)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3133
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3134
      NS_LOG_DEBUG ("Flush aggregate queue");
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3135
      m_aggregateQueue->Flush ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3136
    }
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3137
  m_txPackets.clear ();
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3138
}
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3139
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3140
void
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3141
MacLow::InsertInTxQueue (Ptr<const Packet> packet, const WifiMacHeader &hdr, Time tStamp)
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3142
{
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3143
  Item item;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3144
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3145
  item.packet = packet;
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3146
  item.hdr = hdr;
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3147
  item.timestamp = tStamp;
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3148
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
  3149
  m_txPackets.push_back (item);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3150
}
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
  3151
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3152
Ptr<Packet>
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3153
MacLow::PerformMsduAggregation (Ptr<const Packet> packet, WifiMacHeader *hdr, Time *tstamp, Ptr<Packet> currentAmpduPacket, uint16_t blockAckSize)
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3154
{
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3155
  bool msduAggregation = false;
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3156
  bool isAmsdu = false;
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3157
  Ptr<Packet> currentAmsduPacket = Create<Packet> ();
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3158
  Ptr<Packet> tempPacket = Create<Packet> ();
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3159
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3160
  Ptr<WifiMacQueue> queue;
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3161
  AcIndex ac = QosUtilsMapTidToAc (GetTid (packet, *hdr));
11440
af3a3d5dcc21 cleanup mac-low.cc
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
  3162
  std::map<AcIndex, MacLowAggregationCapableTransmissionListener*>::const_iterator listenerIt = m_edcaListeners.find (ac);
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3163
  NS_ASSERT (listenerIt != m_edcaListeners.end ());
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3164
  queue = listenerIt->second->GetQueue ();
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11622
diff changeset
  3165
11535
e9812cb35cef Bug 2156 [wifi] - Duplicate packets when using two level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11479
diff changeset
  3166
  Ptr<const Packet> peekedPacket = queue->DequeueByTidAndAddress (hdr, hdr->GetQosTid (),
e9812cb35cef Bug 2156 [wifi] - Duplicate packets when using two level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11479
diff changeset
  3167
                                                                  WifiMacHeader::ADDR1, hdr->GetAddr1 ());
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3168
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3169
  listenerIt->second->GetMsduAggregator ()->Aggregate (packet, currentAmsduPacket,
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3170
                                                       listenerIt->second->GetSrcAddressForAggregation (*hdr),
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3171
                                                       listenerIt->second->GetDestAddressForAggregation (*hdr));
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3172
11535
e9812cb35cef Bug 2156 [wifi] - Duplicate packets when using two level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11479
diff changeset
  3173
  peekedPacket = queue->PeekByTidAndAddress (hdr, hdr->GetQosTid (),
e9812cb35cef Bug 2156 [wifi] - Duplicate packets when using two level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11479
diff changeset
  3174
                                             WifiMacHeader::ADDR1, hdr->GetAddr1 (), tstamp);
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3175
  while (peekedPacket != 0)
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3176
    {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3177
      tempPacket = currentAmsduPacket;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3178
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3179
      msduAggregation = listenerIt->second->GetMsduAggregator ()->Aggregate (peekedPacket, tempPacket,
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3180
                                                                             listenerIt->second->GetSrcAddressForAggregation (*hdr),
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3181
                                                                             listenerIt->second->GetDestAddressForAggregation (*hdr));
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3182
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3183
      if (msduAggregation && !StopMpduAggregation (tempPacket, *hdr, currentAmpduPacket, blockAckSize))
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3184
        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3185
          isAmsdu = true;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3186
          currentAmsduPacket = tempPacket;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3187
          queue->Remove (peekedPacket);
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3188
        }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3189
      else
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3190
        {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3191
          break;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3192
        }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3193
      peekedPacket = queue->PeekByTidAndAddress (hdr, hdr->GetQosTid (), WifiMacHeader::ADDR1, hdr->GetAddr1 (), tstamp);
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3194
    }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3195
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3196
  if (isAmsdu)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3197
    {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3198
      NS_LOG_DEBUG ("A-MSDU with size = " << currentAmsduPacket->GetSize ());
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3199
      hdr->SetQosAmsdu ();
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3200
      hdr->SetAddr3 (GetBssid ());
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3201
      return currentAmsduPacket;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3202
    }
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3203
  else
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3204
    {
11535
e9812cb35cef Bug 2156 [wifi] - Duplicate packets when using two level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11479
diff changeset
  3205
      queue->PushFront (packet, *hdr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3206
      return 0;
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3207
    }
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3208
}
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11196
diff changeset
  3209
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11440
diff changeset
  3210
} //namespace ns3