src/wifi/model/mac-low.h
author Ruben Merz <ruben@net.t-labs.tu-berlin.de>
Mon, 16 May 2011 22:12:39 +0200
changeset 7333 17b50c5b062c
parent 7141 072fb225b714
child 7385 10beb0e53130
permissions -rw-r--r--
[Bug 827] promiscuous mode for wifi
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
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: 7139
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
    20
 * Author: Mirko Banchi <mk.banchi@gmail.com>
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
 */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#ifndef MAC_LOW_H
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#define MAC_LOW_H
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include <vector>
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include <stdint.h>
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2530
diff changeset
    27
#include <ostream>
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
    28
#include <map>
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
#include "wifi-mac-header.h"
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
#include "wifi-mode.h"
1964
041240a915f8 build and link
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1922
diff changeset
    32
#include "wifi-preamble.h"
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    33
#include "wifi-remote-station-manager.h"
5955
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    34
#include "ctrl-headers.h"
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
    35
#include "mgt-headers.h"
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
    36
#include "block-ack-agreement.h"
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
#include "ns3/mac48-address.h"
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
#include "ns3/callback.h"
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
#include "ns3/event-id.h"
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
#include "ns3/packet.h"
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
#include "ns3/nstime.h"
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
    42
#include "qos-utils.h"
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
    43
#include "block-ack-cache.h"
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
namespace ns3 {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
class WifiPhy;
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    48
class WifiMac;
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
    49
class EdcaTxopN;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    51
/**
7139
79dd02ed46ec doxygen wifi module grouping all wifi classes
Nicola Baldo <nbaldo@cttc.es>
parents: 6852
diff changeset
    52
 * \ingroup wifi
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    53
 * \brief listen to events coming from ns3::MacLow.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    54
 */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
    55
class MacLowTransmissionListener
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
    56
{
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
public:
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
  MacLowTransmissionListener ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
  virtual ~MacLowTransmissionListener ();
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    61
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    62
   * \param snr the snr of the cts
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    63
   * \param txMode the txMode of the cts
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    64
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    65
   * ns3::MacLow received an expected CTS within
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    66
   * CtsTimeout.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    67
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
  virtual void GotCts (double snr, WifiMode txMode) = 0;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    69
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    70
   * ns3::MacLow did not receive an expected CTS
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    71
   * within CtsTimeout.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    72
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
  virtual void MissedCts (void) = 0;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    74
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    75
   * \param snr the snr of the ack
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    76
   * \param txMode the transmission mode of the ack
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    77
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    78
   * ns3::MacLow received an expected ACL within
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    79
   * AckTimeout. The <i>snr</i> and <i>txMode</i>
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
    80
   * arguments are not valid when SUPER_FAST_ACK is
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    81
   * used.
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
   */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
  virtual void GotAck (double snr, WifiMode txMode) = 0;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    84
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    85
   * ns3::MacLow did not receive an expected ACK within
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    86
   * AckTimeout.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    87
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
  virtual void MissedAck (void) = 0;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    89
  /**
5955
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    90
   * \param blockAck Block ack response header
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    91
   * \param source Address of block ack sender
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    92
   *
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    93
   * Invoked when ns3::MacLow receives a block ack frame.
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    94
   * Block ack frame is received after a block ack request
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
    95
   * and contains information about the correct reception
5955
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    96
   * of a set of packet for which a normal ack wasn't send.
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    97
   * Default implementation for this method is empty. Every
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    98
   * queue that intends to be notified by MacLow of reception
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
    99
   * of a block ack must redefine this function.
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
   100
   */
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
   101
  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source);
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5954
diff changeset
   102
  /**
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   103
   * ns3::MacLow did not receive an expected BLOCK_ACK within
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   104
   * BlockAckTimeout. This method is used only for immediate
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   105
   * block ack variant. With delayed block ack, the MissedAck method will be
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   106
   * called instead: upon receipt of a block ack request, the rx station will
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   107
   * reply with a normal ack frame. Later, when the rx station gets a txop, it
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   108
   * will send the block ack back to the tx station which will reply with a
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   109
   * normal ack to the rx station.
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   110
   */
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   111
  virtual void MissedBlockAck (void);
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   112
  /**
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   113
   * Invoked when ns3::MacLow wants to start a new transmission
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   114
   * as configured by MacLowTransmissionParameters::EnableNextData.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   115
   * The listener is expected to call again MacLow::StartTransmission
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   116
   * with the "next" data to send.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   117
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
  virtual void StartNext (void) = 0;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   120
  /**
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   121
   * Invoked if this transmission was canceled
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
   * one way or another. When this method is invoked,
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
   * you can assume that the packet has not been passed
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   124
   * down the stack to the PHY.
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
   */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
  virtual void Cancel (void) = 0;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
};
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   130
/**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   131
 * \brief listen to NAV events
7139
79dd02ed46ec doxygen wifi module grouping all wifi classes
Nicola Baldo <nbaldo@cttc.es>
parents: 6852
diff changeset
   132
 * \ingroup wifi
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   133
 *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   134
 * This class is typically connected to an instance of ns3::Dcf
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   135
 * and calls to its methods are forwards to the corresponding
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   136
 * ns3::Dcf methods.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   137
 */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   138
class MacLowDcfListener
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   139
{
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
public:
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   141
  MacLowDcfListener ();
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   142
  virtual ~MacLowDcfListener ();
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   143
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   144
   * \param duration duration of NAV timer
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   145
   */
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   146
  virtual void NavStart (Time duration) = 0;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   147
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   148
   * \param duration duration of NAV timer
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   149
   */
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   150
  virtual void NavReset (Time duration) = 0;
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   151
  virtual void AckTimeoutStart (Time duration) = 0;
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   152
  virtual void AckTimeoutReset () = 0;
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   153
  virtual void CtsTimeoutStart (Time duration) = 0;
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   154
  virtual void CtsTimeoutReset () = 0;
1922
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
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   157
/**
7139
79dd02ed46ec doxygen wifi module grouping all wifi classes
Nicola Baldo <nbaldo@cttc.es>
parents: 6852
diff changeset
   158
 * \ingroup wifi
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   159
 * \brief listen for block ack events.
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   160
 */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   161
class MacLowBlockAckEventListener
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   162
{
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   163
public:
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   164
  MacLowBlockAckEventListener ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   165
  virtual ~MacLowBlockAckEventListener ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   166
  /**
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   167
   * Typically is called in order to notify EdcaTxopN that a block ack inactivity
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   168
   * timeout occurs for the block ack agreement identified by the pair <i>originator</i>, <i>tid</i>.
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   169
   *
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   170
   * Rx station maintains an inactivity timer for each block ack
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   171
   * agreement. Timer is reset when a frame with ack policy block ack
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   172
   * or a block ack request are received. When this timer reaches zero
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   173
   * this method is called and a delba frame is scheduled for transmission.
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   174
   */
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   175
  virtual void BlockAckInactivityTimeout (Mac48Address originator, uint8_t tid) = 0;
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   176
};
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   177
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   178
/**
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   179
 * \brief control how a packet is transmitted.
7139
79dd02ed46ec doxygen wifi module grouping all wifi classes
Nicola Baldo <nbaldo@cttc.es>
parents: 6852
diff changeset
   180
 * \ingroup wifi
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   181
 *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   182
 * The ns3::MacLow::StartTransmission method expects
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   183
 * an instance of this class to describe how the packet
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   184
 * should be transmitted.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   185
 */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   186
class MacLowTransmissionParameters
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   187
{
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
public:
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
  MacLowTransmissionParameters ();
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6331
diff changeset
   190
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   191
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   192
   * Wait ACKTimeout for an ACK. If we get an ACK
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   193
   * on time, call MacLowTransmissionListener::GotAck.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   194
   * Call MacLowTransmissionListener::MissedAck otherwise.
1922
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
  void EnableAck (void);
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   197
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   198
   *   - wait PIFS after end-of-tx. If idle, call
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   199
   *     MacLowTransmissionListener::MissedAck.
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
   *   - if busy at end-of-tx+PIFS, wait end-of-rx
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   201
   *   - if Ack ok at end-of-rx, call
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   202
   *     MacLowTransmissionListener::GotAck.
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   203
   *   - if Ack not ok at end-of-rx, report call
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   204
   *     MacLowTransmissionListener::MissedAck
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   205
   *     at end-of-rx+SIFS.
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   206
   *
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
   * This is really complicated but it is needed for
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   208
   * proper HCCA support.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
   */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   210
  void EnableFastAck (void);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   211
  /**
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   212
   *  - if busy at end-of-tx+PIFS, call
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   213
   *    MacLowTransmissionListener::GotAck
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   214
   *  - if idle at end-of-tx+PIFS, call
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   215
   *    MacLowTransmissionListener::MissedAck
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
   */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
  void EnableSuperFastAck (void);
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   218
  /**
5954
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   219
   * Wait BASICBLOCKACKTimeout for a Basic Block Ack Response frame.
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   220
   */
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   221
  void EnableBasicBlockAck (void);
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   222
  /**
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   223
   * Wait COMPRESSEDBLOCKACKTimeout for a Compressed Block Ack Response frame.
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   224
   */
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   225
  void EnableCompressedBlockAck (void);
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   226
  /**
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   227
   * NOT IMPLEMENTED FOR NOW
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   228
   */
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   229
  void EnableMultiTidBlockAck (void);
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   230
  /**
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   231
   * Send a RTS, and wait CTSTimeout for a CTS. If we get a
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   232
   * CTS on time, call MacLowTransmissionListener::GotCts
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   233
   * and send data. Otherwise, call MacLowTransmissionListener::MissedCts
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   234
   * and do not send data.
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
   */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
  void EnableRts (void);
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   237
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   238
   * \param size size of next data to send after current packet is
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   239
   *        sent.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   240
   *
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   241
   * Add the transmission duration of the next data to the
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   242
   * durationId of the outgoing packet and call
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   243
   * MacLowTransmissionListener::StartNext at the end of
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   244
   * the current transmission + SIFS.
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
   */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
  void EnableNextData (uint32_t size);
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6331
diff changeset
   247
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   248
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   249
   * \param durationId the value to set in the duration/Id field of
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   250
   *        the outgoing packet.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   251
   *
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   252
   * Ignore all other durationId calculation and simply force the
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   253
   * packet's durationId field to this value.
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
   */
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
  void EnableOverrideDurationId (Time durationId);
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6331
diff changeset
   256
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   257
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   258
   * Do not wait for Ack after data transmission. Typically
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   259
   * used for Broadcast and multicast frames.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   260
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
  void DisableAck (void);
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   262
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   263
   * Do not send rts and wait for cts before sending data.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   264
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
  void DisableRts (void);
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   266
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   267
   * Do not attempt to send data burst after current transmission
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   268
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
  void DisableNextData (void);
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   270
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   271
   * Do not force the duration/id field of the packet: its
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   272
   * value is automatically calculated by the MacLow before
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   273
   * calling WifiPhy::Send.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   274
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
  void DisableOverrideDurationId (void);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   277
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   278
   * \returns true if must wait for ACK after data transmission,
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   279
   *          false otherwise.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   280
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   281
   * This methods returns true when any of MustWaitNormalAck,
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   282
   * MustWaitFastAck, or MustWaitSuperFastAck return true.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   283
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   284
  bool MustWaitAck (void) const;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   285
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   286
   * \returns true if normal ACK protocol should be used, false
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   287
   *          otherwise.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   288
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   289
   * \sa EnableAck
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   290
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
  bool MustWaitNormalAck (void) const;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   292
  /**
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   293
   * \returns true if fast ack protocol should be used, false
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   294
   *          otherwise.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   295
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   296
   * \sa EnableFastAck
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   297
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
  bool MustWaitFastAck (void) const;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   299
  /**
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   300
   * \returns true if super fast ack protocol should be used, false
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   301
   *          otherwise.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   302
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   303
   * \sa EnableSuperFastAck
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   304
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
  bool MustWaitSuperFastAck (void) const;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   306
  /**
5954
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   307
   * \returns true if block ack mechanism is used, false otherwise.
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   308
   *
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   309
   * \sa EnableBlockAck
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   310
   */
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   311
  bool MustWaitBasicBlockAck (void) const;
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   312
  /**
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   313
   * \returns true if compressed block ack mechanism is used, false otherwise.
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   314
   *
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   315
   * \sa EnableCompressedBlockAck
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   316
   */
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   317
  bool MustWaitCompressedBlockAck (void) const;
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   318
  /**
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   319
   * \returns true if multi-tid block ack mechanism is used, false otherwise.
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   320
   *
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   321
   * \sa EnableMultiTidBlockAck
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   322
   */
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   323
  bool MustWaitMultiTidBlockAck (void) const;
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   324
  /**
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   325
   * \returns true if RTS should be sent and CTS waited for before
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   326
   *          sending data, false otherwise.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   327
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
  bool MustSendRts (void) const;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   329
  /**
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   330
   * \returns true if a duration/id was forced with
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   331
   *         EnableOverrideDurationId, false otherwise.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   332
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
  bool HasDurationId (void) const;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   334
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   335
   * \returns the duration/id forced by EnableOverrideDurationId
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   336
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   337
  Time GetDurationId (void) const;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   338
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   339
   * \returns true if EnableNextData was called, false otherwise.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   340
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   341
  bool HasNextPacket (void) const;
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   342
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   343
   * \returns the size specified by EnableNextData.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   344
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
  uint32_t GetNextPacketSize (void) const;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
private:
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2530
diff changeset
   348
  friend std::ostream &operator << (std::ostream &os, const MacLowTransmissionParameters &params);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
  uint32_t m_nextSize;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   350
  enum
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   351
  {
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
    ACK_NONE,
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   353
    ACK_NORMAL,
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
    ACK_FAST,
5954
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   355
    ACK_SUPER_FAST,
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   356
    BLOCK_ACK_BASIC,
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   357
    BLOCK_ACK_COMPRESSED,
2b9e06875b69 add support for block ack in MacLowTransmissionParameters
Mirko Banchi <mk.banchi@gmail.com>
parents: 5819
diff changeset
   358
    BLOCK_ACK_MULTI_TID
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   359
  } m_waitAck;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   360
  bool m_sendRts;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   361
  Time m_overrideDurationId;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   362
};
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   363
2985
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2530
diff changeset
   364
std::ostream &operator << (std::ostream &os, const MacLowTransmissionParameters &params);
fa0747c4ad5e use function logging macros
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2530
diff changeset
   365
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   366
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   367
/**
7139
79dd02ed46ec doxygen wifi module grouping all wifi classes
Nicola Baldo <nbaldo@cttc.es>
parents: 6852
diff changeset
   368
 * \ingroup wifi
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   369
 * \brief handle RTS/CTS/DATA/ACK transactions.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   370
 */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   371
class MacLow : public Object
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   372
{
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
public:
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5192
diff changeset
   374
  typedef Callback<void, Ptr<Packet>, const WifiMacHeader*> MacLowRxCallback;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   375
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   376
  MacLow ();
2350
0b54480c4fd1 Hook trace sources into the trace system. Add WifiTrace to give a 'simple' API to tracing wifi-specific sources.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2290
diff changeset
   377
  virtual ~MacLow ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   378
2054
ba8e810bae4c derive WifiPhy from Object and manage it with a Ptr<>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2022
diff changeset
   379
  void SetPhy (Ptr<WifiPhy> phy);
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   380
  void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> manager);
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   381
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   382
  void SetAddress (Mac48Address ad);
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   383
  void SetAckTimeout (Time ackTimeout);
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   384
  void SetBasicBlockAckTimeout (Time blockAckTimeout);
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   385
  void SetCompressedBlockAckTimeout (Time blockAckTimeout);
3597
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   386
  void SetCtsTimeout (Time ctsTimeout);
3598
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   387
  void SetSifs (Time sifs);
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   388
  void SetSlotTime (Time slotTime);
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   389
  void SetPifs (Time pifs);
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   390
  void SetBssid (Mac48Address ad);
7333
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7141
diff changeset
   391
  void SetPromisc (void);
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   392
  Mac48Address GetAddress (void) const;
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   393
  Time GetAckTimeout (void) const;
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   394
  Time GetBasicBlockAckTimeout () const;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   395
  Time GetCompressedBlockAckTimeout () const;
3597
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   396
  Time GetCtsTimeout (void) const;
3598
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   397
  Time GetSifs (void) const;
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   398
  Time GetSlotTime (void) const;
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   399
  Time GetPifs (void) const;
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   400
  Mac48Address GetBssid (void) const;
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   401
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   402
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   403
   * \param callback the callback which receives every incoming packet.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   404
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   405
   * This callback typically forwards incoming packets to
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   406
   * an instance of ns3::MacRxMiddle.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   407
   */
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   408
  void SetRxCallback (Callback<void,Ptr<Packet>,const WifiMacHeader *> callback);
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   409
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   410
   * \param listener listen to NAV events for every incoming
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   411
   *        and outgoing packet.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   412
   */
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   413
  void RegisterDcfListener (MacLowDcfListener *listener);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   414
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   415
  /**
2290
081b4efd800c fix doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2289
diff changeset
   416
   * \param packet to send (does not include the 802.11 MAC header and checksum)
081b4efd800c fix doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2289
diff changeset
   417
   * \param hdr header associated to the packet to send.
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   418
   * \param parameters transmission parameters of packet.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   419
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   420
   * This transmission time includes the time required for
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   421
   * the next packet transmission if one was selected.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   422
   */
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2159
diff changeset
   423
  Time CalculateTransmissionTime (Ptr<const Packet> packet,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   424
                                  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: 5192
diff changeset
   425
                                  const MacLowTransmissionParameters& parameters) const;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   426
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   427
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   428
   * \param packet packet to send
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   429
   * \param hdr 802.11 header for packet to send
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   430
   * \param parameters the transmission parameters to use for this packet.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   431
   * \param listener listen to transmission events.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   432
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   433
   * Start the transmission of the input packet and notify the listener
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   434
   * of transmission events.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   435
   */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   436
  void StartTransmission (Ptr<const Packet> packet,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   437
                          const WifiMacHeader* hdr,
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   438
                          MacLowTransmissionParameters parameters,
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   439
                          MacLowTransmissionListener *listener);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   440
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   441
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   442
   * \param packet packet received
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   443
   * \param rxSnr snr of packet received
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   444
   * \param txMode transmission mode of packet received
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   445
   * \param preamble type of preamble used for the packet received
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   446
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   447
   * This method is typically invoked by the lower PHY layer to notify
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   448
   * the MAC layer that a packet was successfully received.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   449
   */
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2146
diff changeset
   450
  void ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiMode txMode, WifiPreamble preamble);
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   451
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   452
   * \param packet packet received.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   453
   * \param rxSnr snr of packet received.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   454
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   455
   * This method is typically invoked by the lower PHY layer to notify
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   456
   * the MAC layer that a packet was unsuccessfully received.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   457
   */
3899
804d92c1f7c3 constify
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3889
diff changeset
   458
  void ReceiveError (Ptr<const Packet> packet, double rxSnr);
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   459
  /**
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   460
   * \param duration switching delay duration.
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   461
   *
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   462
   * This method is typically invoked by the PhyMacLowListener to notify
5192
fb3d57fd97e4 Doxy doc for Wifi channel switching
Ramon Bauza
parents: 5189
diff changeset
   463
   * the MAC layer that a channel switching occured. When a channel switching
fb3d57fd97e4 Doxy doc for Wifi channel switching
Ramon Bauza
parents: 5189
diff changeset
   464
   * occurs, pending MAC transmissions (RTS, CTS, DATA and ACK) are cancelled.
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   465
   */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   466
  void NotifySwitchingStartNow (Time duration);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   467
  /**
6673
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   468
   * \param respHdr Add block ack response from originator (action
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   469
   * frame).
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   470
   * \param originator Address of peer station involved in block ack
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   471
   * mechanism.
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   472
   * \param startingSeq Sequence number of the first MPDU of all
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   473
   * packets for which block ack was negotiated.
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   474
   *
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   475
   * This function is typically invoked only by ns3::RegularWifiMac
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   476
   * when the STA (which may be non-AP in ESS, or in an IBSS) has
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   477
   * received an ADDBA Request frame and is transmitting an ADDBA
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   478
   * Response frame. At this point MacLow must allocate buffers to
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   479
   * collect all correctly received packets belonging to the category
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   480
   * for which Block Ack was negotiated.
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   481
   */
6673
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   482
  void CreateBlockAckAgreement (const MgtAddBaResponseHeader *respHdr,
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   483
                                Mac48Address originator,
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   484
                                uint16_t startingSeq);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   485
  /**
6273
8d70de29d514 spell check, mostly in comments.
Andrey Mazo <mazo@iitp.ru>
parents: 6068
diff changeset
   486
   * \param originator Address of peer participating in Block Ack mechanism.
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   487
   * \param tid TID for which Block Ack was created.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   488
   *
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   489
   * Checks if exists an established block ack agreement with <i>originator</i>
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   490
   * for tid <i>tid</i>. If the agreement exists, tears down it. This function is typically
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   491
   * invoked when a DELBA frame is received from <i>originator</i>.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   492
   */
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   493
  void DestroyBlockAckAgreement (Mac48Address originator, uint8_t tid);
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   494
  /**
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   495
   * \param ac Access class managed by the queue.
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   496
   * \param listener The listener for the queue.
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   497
   *
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   498
   * The lifetime of the registered listener is typically equal to the lifetime of the queue
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   499
   * associated to this AC.
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   500
   */
6331
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6273
diff changeset
   501
  void RegisterBlockAckListenerForAc (enum AcIndex ac, MacLowBlockAckEventListener *listener);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   502
private:
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   503
  void CancelAllEvents (void);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   504
  uint32_t GetAckSize (void) const;
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   505
  uint32_t GetBlockAckSize (enum BlockAckType type) const;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   506
  uint32_t GetRtsSize (void) const;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   507
  uint32_t GetCtsSize (void) const;
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2159
diff changeset
   508
  uint32_t 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
   509
  Time NowUs (void) const;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   510
  void ForwardDown (Ptr<const Packet> packet, const WifiMacHeader *hdr,
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   511
                    WifiMode txMode);
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2159
diff changeset
   512
  Time CalculateOverallTxTime (Ptr<const Packet> packet,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   513
                               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: 5192
diff changeset
   514
                               const MacLowTransmissionParameters &params) const;
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2159
diff changeset
   515
  WifiMode GetRtsTxMode (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2159
diff changeset
   516
  WifiMode GetDataTxMode (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   517
  WifiMode GetCtsTxModeForRts (Mac48Address to, WifiMode rtsTxMode) const;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   518
  WifiMode GetAckTxModeForData (Mac48Address to, WifiMode dataTxMode) const;
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   519
2022
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1978
diff changeset
   520
  Time GetCtsDuration (Mac48Address to, WifiMode rtsTxMode) const;
33579d27ce2a try to simplify duration calculations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1978
diff changeset
   521
  Time GetAckDuration (Mac48Address to, WifiMode dataTxMode) const;
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   522
  Time GetBlockAckDuration (Mac48Address to, WifiMode blockAckReqTxMode, enum BlockAckType type) const;
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   523
  void NotifyNav (const WifiMacHeader &hdr, WifiMode txMode, WifiPreamble preamble);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   524
  void DoNavResetNow (Time duration);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   525
  bool DoNavStartNow (Time duration);
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   526
  bool IsNavZero (void) const;
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   527
  void NotifyAckTimeoutStartNow (Time duration);
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   528
  void NotifyAckTimeoutResetNow ();
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   529
  void NotifyCtsTimeoutStartNow (Time duration);
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   530
  void NotifyCtsTimeoutResetNow ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   531
  void MaybeCancelPrevious (void);
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6331
diff changeset
   532
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   533
  void NavCounterResetCtsMissed (Time rtsEndRxTime);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   534
  void NormalAckTimeout (void);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   535
  void FastAckTimeout (void);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   536
  void SuperFastAckTimeout (void);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   537
  void FastAckFailedTimeout (void);
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   538
  void BlockAckTimeout (void);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   539
  void CtsTimeout (void);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   540
  void SendCtsAfterRts (Mac48Address source, Time duration, WifiMode txMode, double rtsSnr);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   541
  void SendAckAfterData (Mac48Address source, Time duration, WifiMode txMode, double rtsSnr);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   542
  void SendDataAfterCts (Mac48Address source, Time duration, WifiMode txMode);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   543
  void WaitSifsAfterEndTx (void);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   544
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   545
  void SendRtsForPacket (void);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   546
  void SendDataPacket (void);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   547
  void SendCurrentTxPacket (void);
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   548
  void StartDataTxTimers (void);
2530
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   549
  virtual void DoDispose (void);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   550
  /**
6273
8d70de29d514 spell check, mostly in comments.
Andrey Mazo <mazo@iitp.ru>
parents: 6068
diff changeset
   551
   * \param originator Address of peer participating in Block Ack mechanism.
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   552
   * \param tid TID for which Block Ack was created.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   553
   * \param seq Starting sequence
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   554
   *
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   555
   * This function forward up all completed "old" packets with sequence number
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   556
   * smaller than <i>seq</i>. All comparison are performed circularly mod 4096.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   557
   */
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   558
  void 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
   559
  /**
6273
8d70de29d514 spell check, mostly in comments.
Andrey Mazo <mazo@iitp.ru>
parents: 6068
diff changeset
   560
   * \param originator Address of peer participating in Block Ack mechanism.
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   561
   * \param tid TID for which Block Ack was created.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   562
   *
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   563
   * This method is typically invoked when a MPDU with ack policy
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   564
   * subfield set to Normal Ack is received and a block ack agreement
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   565
   * for that packet exists.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   566
   * This happens when the originator of block ack has only few MPDUs to send.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   567
   * All completed MSDUs starting with starting sequence number of block ack
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
   568
   * agreement are forward up to WifiMac until there is an incomplete or missing MSDU.
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   569
   * See section 9.10.4 in IEEE802.11 standard for more details.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   570
   */
6599
8c1a255c05a3 Rename MacLow::RxCompleteBufferedPacket to a more appropriate name
Mirko Banchi <mk.banchi@gmail.com>
parents: 6595
diff changeset
   571
  void RxCompleteBufferedPacketsUntilFirstLost (Mac48Address originator, uint8_t tid);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   572
  /*
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   573
   * This method checks if exists a valid established block ack agreement.
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   574
   * If there is, store the packet without pass it up to WifiMac. The packet is buffered
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   575
   * in order of increasing sequence control field. All comparison are performed
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   576
   * circularly modulo 2^12.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   577
   */
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   578
  bool StoreMpduIfNeeded (Ptr<Packet> packet, WifiMacHeader hdr);
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   579
  /*
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   580
   * Invoked after that a block ack request has been received. Looks for corresponding
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   581
   * block ack agreement and creates block ack bitmap on a received packets basis.
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   582
   */
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   583
  void 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
   584
                                         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
   585
  /*
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   586
   * This method creates block ack frame with header equals to <i>blockAck</i> and start its transmission.
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   587
   */
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   588
  void 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
   589
                             Time duration, WifiMode blockAckReqTxMode);
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   590
  /*
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   591
   * Every time that a block ack request or a packet with ack policy equals to <i>block ack</i>
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   592
   * are received, if a relative block ack agreement exists and the value of inactivity timeout
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   593
   * is not 0, the timer is reset.
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   594
   * see section 11.5.3 in IEEE802.11e for more details.
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   595
   */
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   596
  void ResetBlockAckInactivityTimerIfNeeded (BlockAckAgreement &agreement);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   597
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   598
  void SetupPhyMacLowListener (Ptr<WifiPhy> phy);
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   599
2054
ba8e810bae4c derive WifiPhy from Object and manage it with a Ptr<>
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2022
diff changeset
   600
  Ptr<WifiPhy> m_phy;
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   601
  Ptr<WifiRemoteStationManager> m_stationManager;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   602
  MacLowRxCallback m_rxCallback;
4509
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   603
  typedef std::vector<MacLowDcfListener *>::const_iterator DcfListenersCI;
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   604
  typedef std::vector<MacLowDcfListener *> DcfListeners;
b2654e0f071d bug 556: DcfManager does not handle AckTimeout properly when there are multiple queues
Kirill V. Andreev <kirillano@yandex.ru>
parents: 3906
diff changeset
   605
  DcfListeners m_dcfListeners;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   606
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   607
  EventId m_normalAckTimeoutEvent;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   608
  EventId m_fastAckTimeoutEvent;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   609
  EventId m_superFastAckTimeoutEvent;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   610
  EventId m_fastAckFailedTimeoutEvent;
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   611
  EventId m_blockAckTimeoutEvent;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   612
  EventId m_ctsTimeoutEvent;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   613
  EventId m_sendCtsEvent;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   614
  EventId m_sendAckEvent;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   615
  EventId m_sendDataEvent;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   616
  EventId m_waitSifsEvent;
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   617
  EventId m_navCounterResetCtsMissed;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   618
2159
20f882e85b4a port to Ptr<Packet> branch
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2146
diff changeset
   619
  Ptr<Packet> m_currentPacket;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   620
  WifiMacHeader m_currentHdr;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   621
  MacLowTransmissionParameters m_txParams;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   622
  MacLowTransmissionListener *m_listener;
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   623
  Mac48Address m_self;
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   624
  Mac48Address m_bssid;
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   625
  Time m_ackTimeout;
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   626
  Time m_basicBlockAckTimeout;
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   627
  Time m_compressedBlockAckTimeout;
3597
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   628
  Time m_ctsTimeout;
3598
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   629
  Time m_sifs;
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   630
  Time m_slotTime;
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   631
  Time m_pifs;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   632
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   633
  Time m_lastNavStart;
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   634
  Time m_lastNavDuration;
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   635
7333
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7141
diff changeset
   636
  bool m_promisc;
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7141
diff changeset
   637
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   638
  // Listerner needed to monitor when a channel switching occurs.
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   639
  class PhyMacLowListener * m_phyMacLowListener;
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   640
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   641
  /*
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   642
   * BlockAck data structures.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   643
   */
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   644
  typedef std::pair<Ptr<Packet>, WifiMacHeader> BufferedPacket;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   645
  typedef std::list<BufferedPacket>::iterator BufferedPacketI;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   646
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   647
  typedef std::pair<Mac48Address, uint8_t> AgreementKey;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   648
  typedef std::pair<BlockAckAgreement, std::list<BufferedPacket> > AgreementValue;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   649
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   650
  typedef std::map<AgreementKey, AgreementValue> Agreements;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   651
  typedef std::map<AgreementKey, AgreementValue>::iterator AgreementsI;
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   652
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
   653
  typedef std::map<AgreementKey, BlockAckCache> BlockAckCaches;
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
   654
  typedef std::map<AgreementKey, BlockAckCache>::iterator BlockAckCachesI;
6674
52f8688d6d01 Bug 978: Run check-style.py on files touched in the reorganisation
Dean Armstrong <deanarm@gmail.com>
parents: 6673
diff changeset
   655
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   656
  Agreements m_bAckAgreements;
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
   657
  BlockAckCaches m_bAckCaches;
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6331
diff changeset
   658
6331
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6273
diff changeset
   659
  typedef std::map<AcIndex, MacLowBlockAckEventListener*> QueueListeners;
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   660
  QueueListeners m_edcaListeners;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   661
};
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   662
1977
4303409f3d8e remove uneeded trailing ';'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1964
diff changeset
   663
} // namespace ns3
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   664
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   665
#endif /* MAC_LOW_H */