src/wifi/model/mac-low.h
author Alexander Krotov <krotov@iitp.ru>
Sat, 04 Aug 2018 20:02:47 +0300
changeset 13716 0b3abcc6f68f
parent 13690 6d1d3c5bb74c
child 13807 497681985a58
permissions -rw-r--r--
wifi: remove Log2 function Standard log2 is already used in wifi module anyway
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7333
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2005, 2006 INRIA
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
     4
 * Copyright (c) 2009 MIRKO BANCHI
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 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
 *
12431
0086c2441ab8 wifi: Remove unnecessary includes
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12429
diff changeset
    19
 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
0086c2441ab8 wifi: Remove unnecessary includes
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12429
diff changeset
    20
 *          Mirko Banchi <mk.banchi@gmail.com>
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
 */
12431
0086c2441ab8 wifi: Remove unnecessary includes
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12429
diff changeset
    22
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#ifndef MAC_LOW_H
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#define MAC_LOW_H
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
    26
#include <map>
13486
322626b344d3 wifi: Use forward declaration as often as possible (part 10)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13476
diff changeset
    27
#include "ns3/object.h"
322626b344d3 wifi: Use forward declaration as often as possible (part 10)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13476
diff changeset
    28
#include "ns3/nstime.h"
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
    29
#include "channel-access-manager.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
    30
#include "block-ack-cache.h"
13147
6b2bc94cfa4b wifi: move MacLowTransmissionParameters class to a separate file
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13146
diff changeset
    31
#include "mac-low-transmission-parameters.h"
13468
64f744da5cfe wifi: Use forward declaration as often as possible (part 1)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13432
diff changeset
    32
#include "qos-utils.h"
64f744da5cfe wifi: Use forward declaration as often as possible (part 1)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13432
diff changeset
    33
#include "wifi-mac-header.h"
13486
322626b344d3 wifi: Use forward declaration as often as possible (part 10)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13476
diff changeset
    34
#include "wifi-tx-vector.h"
322626b344d3 wifi: Use forward declaration as often as possible (part 10)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13476
diff changeset
    35
#include "block-ack-type.h"
322626b344d3 wifi: Use forward declaration as often as possible (part 10)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13476
diff changeset
    36
#include "wifi-mpdu-type.h"
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
    37
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
    38
class TwoLevelAggregationTest;
11891
d159bca0ffb4 wifi: Adds tests for MPDU aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11854
diff changeset
    39
class AmpduAggregationTest;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
namespace ns3 {
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
13475
f4c06d289015 wifi: Use forward declaration as often as possible (part 6)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13468
diff changeset
    43
class WifiPhy;
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
    44
class Txop;
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
    45
class QosTxop;
12743
507e46482e8c wifi: Make WifiMacQueue a subclass of Queue
Stefano Avallone <stavallo@unina.it>
parents: 12691
diff changeset
    46
class WifiMacQueueItem;
12949
2ee6854cf29c wifi: Define WifiMacQueue as a subclass of Queue<WifiMacQueueItem>
Stefano Avallone <stavallo@unina.it>
parents: 12942
diff changeset
    47
class WifiMacQueue;
13475
f4c06d289015 wifi: Use forward declaration as often as possible (part 6)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13468
diff changeset
    48
class BlockAckAgreement;
13468
64f744da5cfe wifi: Use forward declaration as often as possible (part 1)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13432
diff changeset
    49
class MgtAddBaResponseHeader;
13475
f4c06d289015 wifi: Use forward declaration as often as possible (part 6)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13468
diff changeset
    50
class WifiRemoteStationManager;
13486
322626b344d3 wifi: Use forward declaration as often as possible (part 10)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13476
diff changeset
    51
class CtrlBAckRequestHeader;
322626b344d3 wifi: Use forward declaration as often as possible (part 10)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13476
diff changeset
    52
class CtrlBAckResponseHeader;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    54
/**
7139
79dd02ed46ec doxygen wifi module grouping all wifi classes
Nicola Baldo <nbaldo@cttc.es>
parents: 6852
diff changeset
    55
 * \ingroup wifi
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    56
 * \brief handle RTS/CTS/DATA/ACK transactions.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
    57
 */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
    58
class MacLow : public Object
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
    59
{
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
public:
13048
c00059ef50e4 wifi: Additional Doxygen fixes
Robert Ammon <ammo6818@vandals.uidaho.edu>
parents: 12949
diff changeset
    61
  /// Allow test cases to access private members
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
    62
  friend class ::TwoLevelAggregationTest;
13048
c00059ef50e4 wifi: Additional Doxygen fixes
Robert Ammon <ammo6818@vandals.uidaho.edu>
parents: 12949
diff changeset
    63
  /// Allow test cases to access private members
11891
d159bca0ffb4 wifi: Adds tests for MPDU aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11854
diff changeset
    64
  friend class ::AmpduAggregationTest;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    65
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    66
   * typedef for a callback for MacLowRx
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    67
   */
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
    68
  typedef Callback<void, Ptr<Packet>, const WifiMacHeader*> MacLowRxCallback;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
  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
    71
  virtual ~MacLow ();
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    73
  /**
11432
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11384
diff changeset
    74
   * Register this type.
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11384
diff changeset
    75
   * \return The TypeId.
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11384
diff changeset
    76
   */
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11384
diff changeset
    77
  static TypeId GetTypeId (void);
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11384
diff changeset
    78
d2656819dd54 Fix parents, group names, and missing constructors in GetTypeId definitions.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11384
diff changeset
    79
  /**
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    80
   * Set up WifiPhy associated with this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    81
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    82
   * \param phy WifiPhy associated with this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    83
   */
12940
9b6857031ad4 wifi: Use const in setters
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12743
diff changeset
    84
  void SetPhy (const Ptr<WifiPhy> phy);
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
    85
  /**
11159
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
    86
   * \return current attached PHY device
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
    87
   */
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
    88
  Ptr<WifiPhy> GetPhy (void) const;
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
    89
  /**
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
    90
   * Remove WifiPhy associated with this MacLow.
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
    91
   */
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
    92
  void ResetPhy (void);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    93
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    94
   * Set up WifiRemoteStationManager associated with this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    95
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    96
   * \param manager WifiRemoteStationManager associated with this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
    97
   */
12940
9b6857031ad4 wifi: Use const in setters
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12743
diff changeset
    98
  void SetWifiRemoteStationManager (const Ptr<WifiRemoteStationManager> manager);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
    99
  /**
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   100
   * Set MAC address of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   101
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   102
   * \param ad Mac48Address of this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   103
   */
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   104
  void SetAddress (Mac48Address ad);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   105
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   106
   * Set ACK timeout of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   107
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   108
   * \param ackTimeout ACK timeout of this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   109
   */
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   110
  void SetAckTimeout (Time ackTimeout);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   111
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   112
   * Set Basic Block ACK timeout of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   113
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   114
   * \param blockAckTimeout Basic Block ACK timeout of this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   115
   */
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   116
  void SetBasicBlockAckTimeout (Time blockAckTimeout);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   117
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   118
   * Set Compressed Block ACK timeout of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   119
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   120
   * \param blockAckTimeout Compressed Block ACK timeout of this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   121
   */
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   122
  void SetCompressedBlockAckTimeout (Time blockAckTimeout);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   123
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   124
   * Enable or disable CTS-to-self capability.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   125
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   126
   * \param enable Enable or disable CTS-to-self capability
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   127
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   128
  void SetCtsToSelfSupported (bool enable);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   129
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   130
   * Set CTS timeout of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   131
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   132
   * \param ctsTimeout CTS timeout of this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   133
   */
3597
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   134
  void SetCtsTimeout (Time ctsTimeout);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   135
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   136
   * Set Short Interframe Space (SIFS) of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   137
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   138
   * \param sifs SIFS of this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   139
   */
3598
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   140
  void SetSifs (Time sifs);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   141
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   142
   * Set Reduced Interframe Space (RIFS) of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   143
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   144
   * \param rifs RIFS of this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   145
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   146
  void SetRifs (Time rifs);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   147
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   148
   * Set slot duration of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   149
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   150
   * \param slotTime slot duration of this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   151
   */
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   152
  void SetSlotTime (Time slotTime);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   153
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   154
   * Set PCF Interframe Space (PIFS) of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   155
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   156
   * \param pifs PIFS of this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   157
   */
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   158
  void SetPifs (Time pifs);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   159
  /**
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   160
   * \param interval the expected interval between two beacon transmissions.
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   161
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   162
  void SetBeaconInterval (Time interval);
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   163
  /**
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   164
   * \param duration the maximum duration for the CF period.
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   165
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   166
  void SetCfpMaxDuration (Time duration);
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   167
  /**
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   168
   * Set the Basic Service Set Identification.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   169
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   170
   * \param ad the BSSID
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   171
   */
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   172
  void SetBssid (Mac48Address ad);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   173
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   174
   * Enable promiscuous mode.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   175
   */
7333
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7141
diff changeset
   176
  void SetPromisc (void);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   177
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   178
   * Return whether CTS-to-self capability is supported.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   179
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   180
   * \return true if CTS-to-self is supported, false otherwise
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   181
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   182
  bool GetCtsToSelfSupported () const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   183
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   184
   * Return the MAC address of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   185
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   186
   * \return Mac48Address of this MacLow
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   187
   */
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   188
  Mac48Address GetAddress (void) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   189
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   190
   * Return ACK timeout of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   191
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   192
   * \return ACK timeout
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   193
   */
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   194
  Time GetAckTimeout (void) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   195
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   196
   * Return Basic Block ACK timeout of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   197
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   198
   * \return Basic Block ACK timeout
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   199
   */
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   200
  Time GetBasicBlockAckTimeout () const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   201
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   202
   * Return Compressed Block ACK timeout of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   203
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   204
   * \return Compressed Block ACK timeout
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   205
   */
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   206
  Time GetCompressedBlockAckTimeout () const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   207
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   208
   * Return CTS timeout of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   209
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   210
   * \return CTS timeout
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   211
   */
3597
fe35e5be4b78 move cts timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3596
diff changeset
   212
  Time GetCtsTimeout (void) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   213
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   214
   * Return Short Interframe Space (SIFS) of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   215
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   216
   * \return SIFS
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   217
   */
3598
7b209b3b6af2 move sifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3597
diff changeset
   218
  Time GetSifs (void) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   219
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   220
   * Return slot duration of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   221
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   222
   * \return slot duration
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   223
   */
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   224
  Time GetSlotTime (void) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   225
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   226
   * Return PCF Interframe Space (PIFS) of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   227
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   228
   * \return PIFS
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   229
   */
3599
721bd46c15f8 move slot and pifs down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3598
diff changeset
   230
  Time GetPifs (void) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   231
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   232
   * Return Reduced Interframe Space (RIFS) of this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   233
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   234
   * \return RIFS
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   235
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   236
  Time GetRifs (void) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   237
  /**
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   238
   * \return the expected interval between two beacon transmissions.
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   239
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   240
  Time GetBeaconInterval (void) const;
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   241
  /**
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   242
   * \return the maximum duration for the CF period.
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   243
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   244
  Time GetCfpMaxDuration (void) const;
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   245
  /**
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   246
   * \return the remaining duration for the CF period.
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   247
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   248
  Time GetRemainingCfpDuration (void) const;
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   249
  /**
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   250
   * Return the Basic Service Set Identification.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   251
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   252
   * \return BSSID
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   253
   */
3600
5888dfe3f245 move GetBssid down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3599
diff changeset
   254
  Mac48Address GetBssid (void) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   255
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   256
   * Check if MacLow is operating in promiscuous mode.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   257
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   258
   * \return true if MacLow is operating in promiscuous mode,
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   259
   *         false otherwise
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   260
   */
10459
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10202
diff changeset
   261
  bool IsPromisc (void) const;
3596
6c39b712a535 move Address and ack timeout down to MacLow
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2985
diff changeset
   262
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   263
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   264
   * \param callback the callback which receives every incoming packet.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   265
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   266
   * This callback typically forwards incoming packets to
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   267
   * an instance of ns3::MacRxMiddle.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   268
   */
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   269
  void SetRxCallback (Callback<void,Ptr<Packet>,const WifiMacHeader *> callback);
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   270
  /**
12571
80142e260133 wifi: code refactoring phase 1
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12512
diff changeset
   271
   * \param dcf listen to NAV events for every incoming and outgoing packet.
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   272
   */
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   273
  void RegisterDcf (Ptr<ChannelAccessManager> dcf);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   275
  /**
2290
081b4efd800c fix doxygen warnings
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2289
diff changeset
   276
   * \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
   277
   * \param hdr header associated to the packet to send.
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   278
   * \param parameters transmission parameters of packet.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   279
   * \return the transmission time that includes the time for the next packet transmission
2059
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 transmission time includes the time required for
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
   * the next packet transmission if one was selected.
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   283
   */
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2159
diff changeset
   284
  Time CalculateTransmissionTime (Ptr<const Packet> packet,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   285
                                  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
   286
                                  const MacLowTransmissionParameters& parameters) const;
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   288
  /**
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   289
   * \param packet to send (does not include the 802.11 MAC header and checksum)
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   290
   * \param hdr header associated to the packet to send.
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   291
   * \param params transmission parameters of packet.
13146
117997e8281b wifi: merge CalculateOverallTxTime and CalculateOverallTxFragmentTime in MacLow
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13144
diff changeset
   292
   * \param fragmentSize the packet fragment size (if fragmentation is used)
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   293
   * \return the transmission time that includes the time for the next packet transmission
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   294
   *
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   295
   * This transmission time includes the time required for
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   296
   * the next packet transmission if one was selected.
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   297
   */
12202
cbe65eebe10b wifi: support 802.11e TXOP
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12112
diff changeset
   298
  Time CalculateOverallTxTime (Ptr<const Packet> packet,
cbe65eebe10b wifi: support 802.11e TXOP
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12112
diff changeset
   299
                               const WifiMacHeader* hdr,
13146
117997e8281b wifi: merge CalculateOverallTxTime and CalculateOverallTxFragmentTime in MacLow
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13144
diff changeset
   300
                               const MacLowTransmissionParameters& params,
117997e8281b wifi: merge CalculateOverallTxTime and CalculateOverallTxFragmentTime in MacLow
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13144
diff changeset
   301
                               uint32_t fragmentSize = 0) const;
12202
cbe65eebe10b wifi: support 802.11e TXOP
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12112
diff changeset
   302
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   303
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   304
   * \param packet packet to send
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   305
   * \param hdr 802.11 header for packet to send
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   306
   * \param parameters the transmission parameters to use for this packet.
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   307
   * \param txop pointer to the calling Txop.
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   308
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   309
   * Start the transmission of the input packet and notify the listener
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   310
   * of transmission events.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   311
   */
11159
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   312
  virtual void StartTransmission (Ptr<const Packet> packet,
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   313
                                  const WifiMacHeader* hdr,
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   314
                                  MacLowTransmissionParameters parameters,
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   315
                                  Ptr<Txop> txop);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   317
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   318
   * \param packet packet received
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   319
   * \param rxSnr snr of packet received
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11353
diff changeset
   320
   * \param txVector TXVECTOR of packet received
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   321
   * \param ampduSubframe true if this MPDU is part of an A-MPDU
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   322
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   323
   * 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
   324
   * the MAC layer that a packet was successfully received.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   325
   */
12429
d12f1640acca wifi: (fixes #2551) Move preamble to TXVECTOR
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12423
diff changeset
   326
  void ReceiveOk (Ptr<Packet> packet, double rxSnr, WifiTxVector txVector, bool ampduSubframe);
2059
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   327
  /**
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   328
   * \param packet packet received.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   329
   * \param rxSnr snr of packet received.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   330
   *
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   331
   * 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
   332
   * the MAC layer that a packet was unsuccessfully received.
d8b7b2de044e doxygen
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2054
diff changeset
   333
   */
12112
ad2fe4acfeea wifi: (fixes #2307) Get rid of m_receivedAtLeastOneMpdu flag
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12007
diff changeset
   334
  void ReceiveError (Ptr<Packet> packet, double rxSnr);
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   335
  /**
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   336
   * \param duration switching delay duration.
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   337
   *
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   338
   * This method is typically invoked by the PhyMacLowListener to notify
13665
b2861f3dc03d Spellcheck
Alexander Krotov <krotov@iitp.ru>
parents: 13557
diff changeset
   339
   * the MAC layer that a channel switching occurred. When a channel switching
5192
fb3d57fd97e4 Doxy doc for Wifi channel switching
Ramon Bauza
parents: 5189
diff changeset
   340
   * occurs, pending MAC transmissions (RTS, CTS, DATA and ACK) are cancelled.
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   341
   */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   342
  void NotifySwitchingStartNow (Time duration);
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   343
  /**
10883
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10507
diff changeset
   344
   * This method is typically invoked by the PhyMacLowListener to notify
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10507
diff changeset
   345
   * the MAC layer that the device has been put into sleep mode. When the device is put
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10507
diff changeset
   346
   * into sleep mode, pending MAC transmissions (RTS, CTS, DATA and ACK) are cancelled.
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10507
diff changeset
   347
   */
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10507
diff changeset
   348
  void NotifySleepNow (void);
d919e7194e23 add support for a Wifi sleep mode
Stefano Avallone <stefano.avallone@unina.it>
parents: 10507
diff changeset
   349
  /**
13220
725c0c581b31 wifi: add NotifyOff
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13207
diff changeset
   350
   * This method is typically invoked by the PhyMacLowListener to notify
725c0c581b31 wifi: add NotifyOff
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13207
diff changeset
   351
   * the MAC layer that the device has been put into off mode. When the device is put
725c0c581b31 wifi: add NotifyOff
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13207
diff changeset
   352
   * into off mode, pending MAC transmissions (RTS, CTS, DATA and ACK) are cancelled.
725c0c581b31 wifi: add NotifyOff
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13207
diff changeset
   353
   */
725c0c581b31 wifi: add NotifyOff
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13207
diff changeset
   354
  void NotifyOffNow (void);
725c0c581b31 wifi: add NotifyOff
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13207
diff changeset
   355
  /**
6673
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   356
   * \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
   357
   * frame).
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   358
   * \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
   359
   * mechanism.
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   360
   * \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
   361
   * 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
   362
   *
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   363
   * 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
   364
   * 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
   365
   * 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
   366
   * 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
   367
   * 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
   368
   * 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
   369
   */
6673
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   370
  void CreateBlockAckAgreement (const MgtAddBaResponseHeader *respHdr,
ec22aa763e2d Bug 978: Consolidate Wi-Fi MAC high functionality
Dean Armstrong <deanarm@gmail.com>
parents: 6606
diff changeset
   371
                                Mac48Address originator,
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   372
                                uint16_t startingSeq);
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   373
  /**
6273
8d70de29d514 spell check, mostly in comments.
Andrey Mazo <mazo@iitp.ru>
parents: 6068
diff changeset
   374
   * \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
   375
   * \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
   376
   *
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   377
   * 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
   378
   * 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
   379
   * 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
   380
   */
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   381
  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
   382
  /**
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   383
   * \param ac Access class managed by the queue.
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   384
   * \param edca the QosTxop for the queue.
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   385
   *
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   386
   * The lifetime of the registered QosTxop is typically equal to the lifetime of the queue
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   387
   * associated to this AC.
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   388
   */
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   389
  void RegisterEdcaForAc (AcIndex ac, Ptr<QosTxop> edca);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   390
  /**
13665
b2861f3dc03d Spellcheck
Alexander Krotov <krotov@iitp.ru>
parents: 13557
diff changeset
   391
   * \param packet the packet to be aggregated. If the aggregation is successful, it corresponds either to the first data packet that will be aggregated or to the BAR that will be piggybacked at the end of the A-MPDU.
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   392
   * \param hdr the WifiMacHeader for the packet.
13665
b2861f3dc03d Spellcheck
Alexander Krotov <krotov@iitp.ru>
parents: 13557
diff changeset
   393
   * \return the A-MPDU packet if aggregation is successful, the input packet otherwise
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   394
   *
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   395
   * This function adds the packets that will be added to an A-MPDU to an aggregate queue
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   396
   *
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   397
   */
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   398
  Ptr<Packet> AggregateToAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   399
  /**
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   400
   * \param aggregatedPacket which is the current A-MPDU
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   401
   * \param rxSnr snr of packet received
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11353
diff changeset
   402
   * \param txVector TXVECTOR of packet received
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   403
   *
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   404
   * This function de-aggregates an A-MPDU and decide if each MPDU is received correctly or not
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   405
   *
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   406
   */
12429
d12f1640acca wifi: (fixes #2551) Move preamble to TXVECTOR
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12423
diff changeset
   407
  void DeaggregateAmpduAndReceive (Ptr<Packet> aggregatedPacket, double rxSnr, WifiTxVector txVector);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   408
  /**
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   409
   * \param peekedPacket the packet to be aggregated
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   410
   * \param peekedHdr the WifiMacHeader for the packet.
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   411
   * \param aggregatedPacket the current A-MPDU
13532
f165109053bc wifi: Fix some types in MacLow
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13486
diff changeset
   412
   * \param blockAckSize the size of a piggybacked block ack request
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   413
   * \return false if the given packet can be added to an A-MPDU, true otherwise
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   414
   *
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   415
   * This function decides if a given packet can be added to an A-MPDU or not
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   416
   *
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   417
   */
13532
f165109053bc wifi: Fix some types in MacLow
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13486
diff changeset
   418
  bool StopMpduAggregation (Ptr<const Packet> peekedPacket, WifiMacHeader peekedHdr, Ptr<Packet> aggregatedPacket, uint8_t blockAckSize) const;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   419
  /**
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   420
   *
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   421
   * This function is called to flush the aggregate queue, which is used for A-MPDU
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   422
   * \param tid the Traffic ID
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   423
   *
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   424
   */
12512
844a94b3ee97 wifi: (fixes #2577) Handle A-MPDU with RTS enabled when multiple TOS are used
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12509
diff changeset
   425
  void FlushAggregateQueue (uint8_t tid);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   426
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   427
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   428
   * Return a TXVECTOR for the DATA frame given the destination.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   429
   * The function consults WifiRemoteStationManager, which controls the rate
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   430
   * to different destinations.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   431
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   432
   * \param packet the packet being asked for TXVECTOR
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   433
   * \param hdr the WifiMacHeader
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   434
   * \return TXVECTOR for the given packet
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   435
   */
10459
f2e90c12a44f base implementation of the IEEE 802.11p standard
Junling Bu <linlinjavaer@gmail.com>
parents: 10202
diff changeset
   436
  virtual WifiTxVector GetDataTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   437
  /**
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   438
   * Start NAV with the given duration.
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   439
   *
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   440
   * \param duration the duration
13665
b2861f3dc03d Spellcheck
Alexander Krotov <krotov@iitp.ru>
parents: 13557
diff changeset
   441
   * \return true if NAV is reset
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   442
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   443
  bool DoNavStartNow (Time duration);
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   444
  /**
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   445
   * This function indicates whether it is the CF period.
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   446
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   447
  virtual bool IsCfPeriod (void) const;
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   448
  /**
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   449
   * This function decides if a CF frame can be transmitted in the current CFP.
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   450
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   451
  bool CanTransmitNextCfFrame (void) const;
12241
ddaf3c4a8e4e wifi: (fixes #2222) Handle internal collisions
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12202
diff changeset
   452
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   453
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   454
private:
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   455
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   456
   * Cancel all scheduled events. Called before beginning a transmission
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   457
   * or switching channel.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   458
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   459
  void CancelAllEvents (void);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   460
  /**
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   461
   * Return the total CF-END size (including FCS trailer).
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   462
   *
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   463
   * \return the total CF-END size
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   464
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   465
  uint32_t GetCfEndSize (void) const;
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   466
  /**
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   467
   * Forward the packet down to WifiPhy for transmission. This is called for the entire A-MPDu when MPDU aggregation is used.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   468
   *
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   469
   * \param packet the packet
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   470
   * \param hdr the header
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   471
   * \param txVector the transmit vector
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   472
   */
12429
d12f1640acca wifi: (fixes #2551) Move preamble to TXVECTOR
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12423
diff changeset
   473
  void ForwardDown (Ptr<const Packet> packet, const WifiMacHeader *hdr, WifiTxVector txVector);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   474
  /**
11773
f5b20a1c6eb3 Bug 2193: Simulation fails when transmitting very small MPDU subframes
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11732
diff changeset
   475
   * Forward the MPDU down to WifiPhy for transmission. This is called for each MPDU when MPDU aggregation is used.
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   476
   *
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   477
   * \param packet the packet
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   478
   * \param txVector the transmit vector
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   479
   * \param mpdutype the MPDU type
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   480
   */
12429
d12f1640acca wifi: (fixes #2551) Move preamble to TXVECTOR
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12423
diff changeset
   481
  void SendMpdu (Ptr<const Packet> packet, WifiTxVector txVector, MpduType mpdutype);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   482
  /**
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   483
   * Return a TXVECTOR for the RTS frame given the destination.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   484
   * The function consults WifiRemoteStationManager, which controls the rate
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   485
   * to different destinations.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   486
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   487
   * \param packet the packet being asked for RTS TXVECTOR
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   488
   * \param hdr the WifiMacHeader
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   489
   * \return TXVECTOR for the RTS of the given packet
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   490
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   491
  WifiTxVector GetRtsTxVector (Ptr<const Packet> packet, const WifiMacHeader *hdr) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   492
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   493
   * Return a TXVECTOR for the CTS frame given the destination and the mode of the RTS
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   494
   * used by the sender.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   495
   * The function consults WifiRemoteStationManager, which controls the rate
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   496
   * to different destinations.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   497
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   498
   * \param to the MAC address of the CTS receiver
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   499
   * \param rtsTxMode the mode of the RTS used by the sender
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   500
   * \return TXVECTOR for the CTS
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   501
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   502
  WifiTxVector GetCtsTxVector (Mac48Address to, WifiMode rtsTxMode) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   503
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   504
   * Return a TXVECTOR for the ACK frame given the destination and the mode of the DATA
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   505
   * used by the sender.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   506
   * The function consults WifiRemoteStationManager, which controls the rate
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   507
   * to different destinations.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   508
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   509
   * \param to the MAC address of the ACK receiver
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   510
   * \param dataTxMode the mode of the DATA used by the sender
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   511
   * \return TXVECTOR for the ACK
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   512
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   513
  WifiTxVector GetAckTxVector (Mac48Address to, WifiMode dataTxMode) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   514
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   515
   * Return a TXVECTOR for the Block ACK frame given the destination and the mode of the DATA
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   516
   * used by the sender.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   517
   * The function consults WifiRemoteStationManager, which controls the rate
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   518
   * to different destinations.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   519
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   520
   * \param to the MAC address of the Block ACK receiver
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   521
   * \param dataTxMode the mode of the DATA used by the sender
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   522
   * \return TXVECTOR for the Block ACK
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   523
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   524
  WifiTxVector GetBlockAckTxVector (Mac48Address to, WifiMode dataTxMode) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   525
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   526
   * Return a TXVECTOR for the CTS frame given the destination and the mode of the RTS
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   527
   * used by the sender.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   528
   * The function consults WifiRemoteStationManager, which controls the rate
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   529
   * to different destinations.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   530
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   531
   * \param to the MAC address of the CTS receiver
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   532
   * \param rtsTxMode the mode of the RTS used by the sender
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   533
   * \return TXVECTOR for the CTS
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   534
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   535
  WifiTxVector GetCtsTxVectorForRts (Mac48Address to, WifiMode rtsTxMode) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   536
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   537
   * Return a TXVECTOR for the Block ACK frame given the destination and the mode of the DATA
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   538
   * used by the sender.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   539
   * The function consults WifiRemoteStationManager, which controls the rate
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   540
   * to different destinations.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   541
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   542
   * \param to the MAC address of the Block ACK receiver
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   543
   * \param dataTxMode the mode of the DATA used by the sender
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   544
   * \return TXVECTOR for the Block ACK
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   545
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   546
  WifiTxVector GetAckTxVectorForData (Mac48Address to, WifiMode dataTxMode) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   547
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   548
   * Return the time required to transmit the CTS (including preamble and FCS).
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   549
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   550
   * \param ctsTxVector
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   551
   * \return the time required to transmit the CTS (including preamble and FCS)
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   552
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   553
  Time GetCtsDuration (WifiTxVector ctsTxVector) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   554
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   555
   * Return the time required to transmit the CTS to the specified address
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   556
   * given the TXVECTOR of the RTS (including preamble and FCS).
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   557
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   558
   * \param to
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   559
   * \param rtsTxVector
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   560
   * \return the time required to transmit the CTS (including preamble and FCS)
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   561
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   562
  Time GetCtsDuration (Mac48Address to, WifiTxVector rtsTxVector) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   563
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   564
   * Return the time required to transmit the ACK (including preamble and FCS).
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   565
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   566
   * \param ackTxVector
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   567
   * \return the time required to transmit the ACK (including preamble and FCS)
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   568
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   569
  Time GetAckDuration (WifiTxVector ackTxVector) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   570
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   571
   * Return the time required to transmit the ACK to the specified address
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   572
   * given the TXVECTOR of the DATA (including preamble and FCS).
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   573
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   574
   * \param to
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   575
   * \param dataTxVector
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   576
   * \return the time required to transmit the ACK (including preamble and FCS)
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   577
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   578
  Time GetAckDuration (Mac48Address to, WifiTxVector dataTxVector) const;
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   579
  /**
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   580
   * Return the time required to transmit the Block ACK to the specified address
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   581
   * given the TXVECTOR of the BAR (including preamble and FCS).
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   582
   *
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   583
   * \param blockAckReqTxVector
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   584
   * \param type the Block ACK type
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   585
   * \return the time required to transmit the Block ACK (including preamble and FCS)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   586
   */
13226
7df3dd047fd3 wifi: remove unused input parameters
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13220
diff changeset
   587
  Time GetBlockAckDuration (WifiTxVector blockAckReqTxVector, BlockAckType type) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   588
  /**
11853
dfae11557a03 wifi: (fixes #2271) Compare RtsCtsThreshold against the total A-MPDU size
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11773
diff changeset
   589
   * Check if the current packet should be sent with a RTS protection.
dfae11557a03 wifi: (fixes #2271) Compare RtsCtsThreshold against the total A-MPDU size
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11773
diff changeset
   590
   *
dfae11557a03 wifi: (fixes #2271) Compare RtsCtsThreshold against the total A-MPDU size
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11773
diff changeset
   591
   * \return true if RTS protection should be used,
dfae11557a03 wifi: (fixes #2271) Compare RtsCtsThreshold against the total A-MPDU size
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11773
diff changeset
   592
   *         false otherwise
dfae11557a03 wifi: (fixes #2271) Compare RtsCtsThreshold against the total A-MPDU size
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11773
diff changeset
   593
   */
12436
5661e19df213 wifi: Add missing const
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12431
diff changeset
   594
  bool NeedRts (void) const;
11853
dfae11557a03 wifi: (fixes #2271) Compare RtsCtsThreshold against the total A-MPDU size
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11773
diff changeset
   595
  /**
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   596
   * Check if CTS-to-self mechanism should be used for the current packet.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   597
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   598
   * \return true if CTS-to-self mechanism should be used for the current packet,
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   599
   *         false otherwise
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   600
   */
12436
5661e19df213 wifi: Add missing const
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12431
diff changeset
   601
  bool NeedCtsToSelf (void) const;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   602
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   603
  /**
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   604
   * Notify NAV function.
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   605
   *
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   606
   * \param packet the packet
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   607
   * \param hdr the header
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   608
   */
13226
7df3dd047fd3 wifi: remove unused input parameters
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13220
diff changeset
   609
  void NotifyNav (Ptr<const Packet> packet,const WifiMacHeader &hdr);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   610
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   611
   * Reset NAV with the given duration.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   612
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   613
   * \param duration
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   614
   */
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   615
  void DoNavResetNow (Time duration);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   616
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   617
   * Check if NAV is zero.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   618
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   619
   * \return true if NAV is zero,
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   620
   *         false otherwise
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   621
   */
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   622
  bool IsNavZero (void) const;
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   623
  /**
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   624
   * Notify ChannelAccessManager that ACK timer should be started for the given duration.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   625
   *
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   626
   * \param duration the duration
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   627
   */
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
   628
  void NotifyAckTimeoutStartNow (Time duration);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   629
  /**
13665
b2861f3dc03d Spellcheck
Alexander Krotov <krotov@iitp.ru>
parents: 13557
diff changeset
   630
   * Notify ChannelAccessManager that ACK timer should be reset.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   631
   */
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
   632
  void NotifyAckTimeoutResetNow ();
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   633
  /**
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   634
   * Notify ChannelAccessManager that CTS timer should be started for the given duration.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   635
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   636
   * \param duration
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   637
   */
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
   638
  void NotifyCtsTimeoutStartNow (Time duration);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   639
  /**
13665
b2861f3dc03d Spellcheck
Alexander Krotov <krotov@iitp.ru>
parents: 13557
diff changeset
   640
   * Notify ChannelAccessManager that CTS timer should be reset.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   641
   */
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
   642
  void NotifyCtsTimeoutResetNow ();
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   643
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   644
   * Reset NAV after CTS was missed when the NAV was
13665
b2861f3dc03d Spellcheck
Alexander Krotov <krotov@iitp.ru>
parents: 13557
diff changeset
   645
   * set with RTS.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   646
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   647
   * \param rtsEndRxTime
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   648
   */
2146
40ad60ac9912 replace Dcf with DcfManager
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2059
diff changeset
   649
  void NavCounterResetCtsMissed (Time rtsEndRxTime);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   650
  /* Event handlers */
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   651
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   652
   * Event handler when normal ACK timeout occurs.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   653
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   654
  void NormalAckTimeout (void);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   655
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   656
   * Event handler when block ACK timeout occurs.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   657
   */
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5957
diff changeset
   658
  void BlockAckTimeout (void);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   659
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   660
   * Event handler when CTS timeout occurs.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   661
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   662
  void CtsTimeout (void);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   663
  /**
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   664
   * Event handler when CF-POLL timeout occurs.
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   665
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   666
  void CfPollTimeout (void);
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   667
  /**
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   668
   * Send CTS for a CTS-to-self mechanism.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   669
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   670
  void SendCtsToSelf (void);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   671
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   672
   * Send CTS after receiving RTS.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   673
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   674
   * \param source
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   675
   * \param duration
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11353
diff changeset
   676
   * \param rtsTxVector
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   677
   * \param rtsSnr
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   678
   */
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11353
diff changeset
   679
  void SendCtsAfterRts (Mac48Address source, Time duration, WifiTxVector rtsTxVector, double rtsSnr);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   680
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   681
   * Send ACK after receiving DATA.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   682
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   683
   * \param source
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   684
   * \param duration
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   685
   * \param dataTxMode
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   686
   * \param dataSnr
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   687
   */
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   688
  void SendAckAfterData (Mac48Address source, Time duration, WifiMode dataTxMode, double dataSnr);
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   689
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   690
   * Send DATA after receiving CTS.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   691
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   692
   * \param duration
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   693
   */
13297
37621a9c2a66 wifi: Eliminate some Visual Studio compiler warnings
Robert Ammon <ammo6818@vandals.uidaho.edu>
parents: 13226
diff changeset
   694
  void SendDataAfterCts (Time duration);
12202
cbe65eebe10b wifi: support 802.11e TXOP
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12112
diff changeset
   695
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   696
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   697
   * Event handler that is usually scheduled to fired at the appropriate time
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   698
   * after completing transmissions.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   699
   */
12611
9e27334426d2 wifi: (fixes #2528) Improve 802.11n RIFS support
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12590
diff changeset
   700
  void WaitIfsAfterEndTxFragment (void);
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   701
  /**
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   702
   * Event handler that is usually scheduled to fired at the appropriate time
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   703
   * after sending a packet.
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   704
   */
12611
9e27334426d2 wifi: (fixes #2528) Improve 802.11n RIFS support
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12590
diff changeset
   705
  void WaitIfsAfterEndTxPacket (void);
12202
cbe65eebe10b wifi: support 802.11e TXOP
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12112
diff changeset
   706
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   707
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   708
   * A transmission that does not require an ACK has completed.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   709
   */
9176
41ab1e874804 Bug 555 - DCF immediate access fix
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 7385
diff changeset
   710
  void EndTxNoAck (void);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   711
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   712
   * Send RTS to begin RTS-CTS-DATA-ACK transaction.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   713
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   714
  void SendRtsForPacket (void);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   715
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   716
   * Send DATA packet, which can be DATA-ACK or
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   717
   * RTS-CTS-DATA-ACK transaction.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   718
   */
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   719
  void SendDataPacket (void);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   720
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   721
   * Start a DATA timer by scheduling appropriate
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   722
   * ACK timeout.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   723
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   724
   * \param dataTxVector
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   725
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9176
diff changeset
   726
  void StartDataTxTimers (WifiTxVector dataTxVector);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   727
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   728
  void DoDispose (void);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   729
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   730
  /**
6273
8d70de29d514 spell check, mostly in comments.
Andrey Mazo <mazo@iitp.ru>
parents: 6068
diff changeset
   731
   * \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
   732
   * \param tid TID for which Block Ack was created.
11622
d0da0aa55bda Bug 2104 [wifi] - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control (initial fix from Steven Sultana)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11621
diff changeset
   733
   * \param seq Starting sequence control
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   734
   *
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   735
   * 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
   736
   * 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
   737
   */
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   738
  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
   739
  /**
6273
8d70de29d514 spell check, mostly in comments.
Andrey Mazo <mazo@iitp.ru>
parents: 6068
diff changeset
   740
   * \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
   741
   * \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
   742
   *
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   743
   * 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
   744
   * 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
   745
   * for that packet exists.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   746
   * 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
   747
   * 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
   748
   * agreement are forward up to WifiMac until there is an incomplete or missing MSDU.
11083
96e983e7cd5d fix typos in wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 10883
diff changeset
   749
   * See section 9.10.4 in IEEE 802.11 standard for more details.
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   750
   */
6599
8c1a255c05a3 Rename MacLow::RxCompleteBufferedPacket to a more appropriate name
Mirko Banchi <mk.banchi@gmail.com>
parents: 6595
diff changeset
   751
  void RxCompleteBufferedPacketsUntilFirstLost (Mac48Address originator, uint8_t tid);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   752
  /**
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   753
   * \param packet the packet
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   754
   * \param hdr the header
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   755
   * \returns true if MPDU received
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   756
   *
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   757
   * This method updates the reorder buffer and the scoreboard when an MPDU is received in an HT station
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   758
   * and stores the MPDU if needed when an MPDU is received in an non-HT Station (implements HT
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   759
   * immediate block Ack)
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   760
   */
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   761
  bool ReceiveMpdu (Ptr<Packet> packet, WifiMacHeader hdr);
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   762
  /**
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   763
   * \param packet the packet
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   764
   * \param hdr the header
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   765
   * \returns true if the MPDU stored
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   766
   *
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 7139
diff changeset
   767
   * 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
   768
   * 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
   769
   * 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
   770
   * circularly modulo 2^12.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   771
   */
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   772
  bool StoreMpduIfNeeded (Ptr<Packet> packet, WifiMacHeader hdr);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   773
  /**
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   774
   * 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
   775
   * block ack agreement and creates block ack bitmap on a received packets basis.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   776
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   777
   * \param reqHdr
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   778
   * \param originator
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   779
   * \param duration
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   780
   * \param blockAckReqTxMode
12007
b1aec364f2c7 wifi: (partial fix #1797) Carry SnrTag info back to IdealWifiManager
Tom Henderson <tomh@tomh.org>
parents: 11996
diff changeset
   781
   * \param rxSnr
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   782
   */
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   783
  void SendBlockAckAfterBlockAckRequest (const CtrlBAckRequestHeader reqHdr, Mac48Address originator,
12007
b1aec364f2c7 wifi: (partial fix #1797) Carry SnrTag info back to IdealWifiManager
Tom Henderson <tomh@tomh.org>
parents: 11996
diff changeset
   784
                                         Time duration, WifiMode blockAckReqTxMode, double rxSnr);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   785
  /**
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   786
   * Invoked after an A-MPDU has been received. Looks for corresponding
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   787
   * block ack agreement and creates block ack bitmap on a received packets basis.
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   788
   *
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   789
   * \param tid the Traffic ID
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   790
   * \param originator the originator MAC address
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   791
   * \param duration the remaining NAV duration
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   792
   * \param blockAckReqTxVector the transmit vector
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   793
   * \param rxSnr the receive SNR
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   794
   */
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   795
  void SendBlockAckAfterAmpdu (uint8_t tid, Mac48Address originator,
12007
b1aec364f2c7 wifi: (partial fix #1797) Carry SnrTag info back to IdealWifiManager
Tom Henderson <tomh@tomh.org>
parents: 11996
diff changeset
   796
                               Time duration, WifiTxVector blockAckReqTxVector, double rxSnr);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   797
  /**
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   798
   * This method creates block ack frame with header equals to <i>blockAck</i> and start its transmission.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   799
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   800
   * \param blockAck
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   801
   * \param originator
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   802
   * \param immediate
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   803
   * \param duration
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   804
   * \param blockAckReqTxMode
12007
b1aec364f2c7 wifi: (partial fix #1797) Carry SnrTag info back to IdealWifiManager
Tom Henderson <tomh@tomh.org>
parents: 11996
diff changeset
   805
   * \param rxSnr
5957
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   806
   */
dd5ece55acb9 handle block ack and block ack request frames in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5956
diff changeset
   807
  void SendBlockAckResponse (const CtrlBAckResponseHeader* blockAck, Mac48Address originator, bool immediate,
12007
b1aec364f2c7 wifi: (partial fix #1797) Carry SnrTag info back to IdealWifiManager
Tom Henderson <tomh@tomh.org>
parents: 11996
diff changeset
   808
                             Time duration, WifiMode blockAckReqTxMode, double rxSnr);
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   809
  /**
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   810
   * 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
   811
   * 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
   812
   * is not 0, the timer is reset.
11083
96e983e7cd5d fix typos in wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 10883
diff changeset
   813
   * see section 11.5.3 in IEEE 802.11e for more details.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   814
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   815
   * \param agreement
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   816
   */
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   817
  void ResetBlockAckInactivityTimerIfNeeded (BlockAckAgreement &agreement);
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   818
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   819
  /**
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   820
   * Set up WifiPhy listener for this MacLow.
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   821
   *
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   822
   * \param phy the WifiPhy this MacLow is connected to
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   823
   */
12940
9b6857031ad4 wifi: Use const in setters
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12743
diff changeset
   824
  void SetupPhyMacLowListener (const Ptr<WifiPhy> phy);
11159
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   825
  /**
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   826
   * Remove current WifiPhy listener for this MacLow.
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   827
   *
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   828
   * \param phy the WifiPhy this MacLow is connected to
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   829
   */
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11083
diff changeset
   830
  void RemovePhyMacLowListener (Ptr<WifiPhy> phy);
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   831
  /**
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   832
   * Checks if the given packet will be aggregated to an A-MPDU or not
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   833
   *
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   834
   * \param packet packet to check whether it can be aggregated in an A-MPDU
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   835
   * \param hdr 802.11 header for packet to check whether it can be aggregated in an A-MPDU
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   836
   * \returns true if is A-MPDU
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   837
   */
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   838
  bool IsAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr);
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   839
  /**
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
   840
   * Insert in a temporary queue.
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
   841
   * It is only used with a RTS/CTS exchange for an A-MPDU transmission.
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   842
   *
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   843
   * \param packet packet to be inserted in the A-MPDU tx queue
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   844
   * \param hdr 802.11 header for the packet to be inserted in the A-MPDU tx queue
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   845
   * \param tStamp timestamp of the packet to be inserted in the A-MPDU tx queue
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   846
   * \param tid the Traffic ID of the packet to be inserted in the A-MPDU tx queue
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
   847
   */
12512
844a94b3ee97 wifi: (fixes #2577) Handle A-MPDU with RTS enabled when multiple TOS are used
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12509
diff changeset
   848
  void InsertInTxQueue (Ptr<const Packet> packet, const WifiMacHeader &hdr, Time tStamp, uint8_t tid);
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
   849
  /**
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   850
   * Perform MSDU aggregation for a given MPDU in an A-MPDU
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   851
   *
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   852
   * \param packet packet picked for aggregation
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   853
   * \param hdr 802.11 header for packet picked for aggregation
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   854
   * \param tstamp timestamp
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   855
   * \param currentAmpduPacket current A-MPDU packet
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   856
   * \param blockAckSize size of the piggybacked block ack request
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   857
   *
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   858
   * \return the aggregate if MSDU aggregation succeeded, 0 otherwise
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   859
   */
13532
f165109053bc wifi: Fix some types in MacLow
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13486
diff changeset
   860
  Ptr<Packet> PerformMsduAggregation (Ptr<const Packet> packet, WifiMacHeader *hdr, Time *tstamp, Ptr<Packet> currentAmpduPacket, uint8_t blockAckSize);
11352
a1f6f647d516 add two-level aggregation
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11174
diff changeset
   861
10507
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   862
  Ptr<WifiPhy> m_phy; //!< Pointer to WifiPhy (actually send/receives frames)
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   863
  Ptr<WifiRemoteStationManager> m_stationManager; //!< Pointer to WifiRemoteStationManager (rate control)
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   864
  MacLowRxCallback m_rxCallback; //!< Callback to pass packet up
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   865
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
   866
  /**
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
   867
   * A struct for packet, Wifi header, and timestamp.
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
   868
   */
13101
708b2c89cb9d wifi, mesh: (partial fix #2451) Avoid anonymous typedefs (for bindings)
Tom Henderson <tomh@tomh.org>
parents: 13048
diff changeset
   869
  struct Item
11353
b03d1c0ada03 Bug 2075 [wifi] - A-MPDU using RTS/CTS behaves wrongly when MaxSsrc is reached
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11352
diff changeset
   870
  {
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   871
    Ptr<const Packet> packet; //!< the packet
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   872
    WifiMacHeader hdr; //!< the header
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   873
    Time timestamp; //!< the timestamp
13101
708b2c89cb9d wifi, mesh: (partial fix #2451) Avoid anonymous typedefs (for bindings)
Tom Henderson <tomh@tomh.org>
parents: 13048
diff changeset
   874
  }; //!< item structure
708b2c89cb9d wifi, mesh: (partial fix #2451) Avoid anonymous typedefs (for bindings)
Tom Henderson <tomh@tomh.org>
parents: 13048
diff changeset
   875
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   876
  /**
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   877
   * A struct that holds information about ACK piggybacking (CF-ACK).
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   878
   */
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   879
  struct CfAckInfo
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   880
  {
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   881
    bool appendCfAck; //!< Flag used for PCF to indicate whether a CF-ACK should be appended
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   882
    bool expectCfAck; //!< Flag used for PCF to indicate whether a CF-ACK should be expected
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   883
    Mac48Address address; //!< Address of the station to be acknowledged
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   884
  };
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   885
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   886
  /**
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   887
   * typedef for an iterator for a list of ChannelAccessManager.
10483
e3a02ed14587 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10459
diff changeset
   888
   */
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   889
  typedef std::vector<Ptr<ChannelAccessManager> >::const_iterator ChannelAccessManagersCI;
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   890
  /**
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   891
   * typedef for a list of ChannelAccessManager.
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   892
   */
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   893
  typedef std::vector<Ptr<ChannelAccessManager> > ChannelAccessManagers;
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   894
  ChannelAccessManagers m_channelAccessManagers; //!< List of ChannelAccessManager
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   895
10507
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   896
  EventId m_normalAckTimeoutEvent;      //!< Normal ACK timeout event
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   897
  EventId m_blockAckTimeoutEvent;       //!< Block ACK timeout event
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   898
  EventId m_ctsTimeoutEvent;            //!< CTS timeout event
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   899
  EventId m_sendCtsEvent;               //!< Event to send CTS
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   900
  EventId m_sendAckEvent;               //!< Event to send ACK
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   901
  EventId m_sendDataEvent;              //!< Event to send DATA
12611
9e27334426d2 wifi: (fixes #2528) Improve 802.11n RIFS support
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12590
diff changeset
   902
  EventId m_waitIfsEvent;               //!< Wait for IFS event
10507
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   903
  EventId m_endTxNoAckEvent;            //!< Event for finishing transmission that does not require ACK
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   904
  EventId m_navCounterResetCtsMissed;   //!< Event to reset NAV when CTS is not received
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   905
10507
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   906
  Ptr<Packet> m_currentPacket;              //!< Current packet transmitted/to be transmitted
11732
5438504862ac Bug 2185 [wifi] - WiFi MacLow may respond to errored frames that it should ignore
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11684
diff changeset
   907
  WifiMacHeader m_currentHdr;               //!< Header of the current transmitted packet
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   908
  Ptr<Txop> m_currentTxop;                  //!< Current TXOP
10507
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   909
  MacLowTransmissionParameters m_txParams;  //!< Transmission parameters of the current packet
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   910
  Mac48Address m_self;                      //!< Address of this MacLow (Mac48Address)
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   911
  Mac48Address m_bssid;                     //!< BSSID address (Mac48Address)
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   912
  Time m_ackTimeout;                        //!< ACK timeout duration
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   913
  Time m_basicBlockAckTimeout;              //!< Basic block ACK timeout duration
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   914
  Time m_compressedBlockAckTimeout;         //!< Compressed block ACK timeout duration
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   915
  Time m_ctsTimeout;                        //!< CTS timeout duration
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   916
  Time m_sifs;                              //!< Short Interframe Space (SIFS) duration
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   917
  Time m_slotTime;                          //!< Slot duration
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   918
  Time m_pifs;                              //!< PCF Interframe Space (PIFS) duration
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   919
  Time m_rifs;                              //!< Reduced Interframe Space (RIFS) duration
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   920
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   921
  Time m_beaconInterval;   //!< Expected interval between two beacon transmissions
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   922
  Time m_cfpMaxDuration;   //!< CFP max duration
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   923
10507
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   924
  Time m_lastNavStart;     //!< The time when the latest NAV started
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   925
  Time m_lastNavDuration;  //!< The duration of the latest NAV
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4509
diff changeset
   926
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   927
  Time m_cfpStart;          //!< The time when the latest CF period started
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   928
  Time m_lastBeacon;        //!< The time when the last beacon frame transmission started
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   929
  Time m_cfpForeshortening; //!< The delay the current CF period should be foreshortened
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   930
10507
2081aa152526 [doxygen] wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10483
diff changeset
   931
  bool m_promisc;  //!< Flag if the device is operating in promiscuous mode
11174
780a43e4980c add MPDU aggregation (with contributions from Sebastien Deronne and Ioannis Selinis)
Ghada Badawy <gbadawy@gmail.com>
parents: 11159
diff changeset
   932
  bool m_ampdu;    //!< Flag if the current transmission involves an A-MPDU
7333
17b50c5b062c [Bug 827] promiscuous mode for wifi
Ruben Merz <ruben@net.t-labs.tu-berlin.de>
parents: 7141
diff changeset
   933
11083
96e983e7cd5d fix typos in wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 10883
diff changeset
   934
  class PhyMacLowListener * m_phyMacLowListener; //!< Listener needed to monitor when a channel switching occurs.
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   935
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   936
  /*
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   937
   * BlockAck data structures.
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   938
   */
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   939
  typedef std::pair<Ptr<Packet>, WifiMacHeader> BufferedPacket; //!< buffered packet typedef
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   940
  typedef std::list<BufferedPacket>::iterator BufferedPacketI; //!< buffered packet iterator typedef
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   941
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   942
  typedef std::pair<Mac48Address, uint8_t> AgreementKey; //!< agreement key typedef
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   943
  typedef std::pair<BlockAckAgreement, std::list<BufferedPacket> > AgreementValue; //!< agreement value typedef
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   944
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   945
  typedef std::map<AgreementKey, AgreementValue> Agreements; //!< agreements
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   946
  typedef std::map<AgreementKey, AgreementValue>::iterator AgreementsI; //!< agreements iterator
5956
e9918be47f78 MacLow now buffers QoS MPDUs under Block Ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   947
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   948
  typedef std::map<AgreementKey, BlockAckCache> BlockAckCaches; //!< block ack caches typedef
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   949
  typedef std::map<AgreementKey, BlockAckCache>::iterator BlockAckCachesI; //!< block ack caches iterator typedef
6674
52f8688d6d01 Bug 978: Run check-style.py on files touched in the reorganisation
Dean Armstrong <deanarm@gmail.com>
parents: 6673
diff changeset
   950
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   951
  Agreements m_bAckAgreements; //!< block ack agreements
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   952
  BlockAckCaches m_bAckCaches; //!< block ack caches
6595
3289a9d91620 run check-style on mac-low.h/cc
Mirko Banchi <mk.banchi@gmail.com>
parents: 6331
diff changeset
   953
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   954
  typedef std::map<AcIndex, Ptr<QosTxop> > QueueEdcas; //!< EDCA queues typedef
12691
e33cd795e21a wifi: Doxygen updates for model files (thanks to Robert Ammon)
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12676
diff changeset
   955
  QueueEdcas m_edca; //!< EDCA queues
12512
844a94b3ee97 wifi: (fixes #2577) Handle A-MPDU with RTS enabled when multiple TOS are used
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12509
diff changeset
   956
844a94b3ee97 wifi: (fixes #2577) Handle A-MPDU with RTS enabled when multiple TOS are used
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12509
diff changeset
   957
  bool m_ctsToSelfSupported;             //!< Flag whether CTS-to-self is supported
844a94b3ee97 wifi: (fixes #2577) Handle A-MPDU with RTS enabled when multiple TOS are used
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12509
diff changeset
   958
  Ptr<WifiMacQueue> m_aggregateQueue[8]; //!< Queues per TID used for MPDU aggregation
844a94b3ee97 wifi: (fixes #2577) Handle A-MPDU with RTS enabled when multiple TOS are used
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12509
diff changeset
   959
  std::vector<Item> m_txPackets[8];      //!< Contain temporary items to be sent with the next A-MPDU transmission for a given TID, once RTS/CTS exchange has succeeded.
844a94b3ee97 wifi: (fixes #2577) Handle A-MPDU with RTS enabled when multiple TOS are used
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 12509
diff changeset
   960
  WifiTxVector m_currentTxVector;        //!< TXVECTOR used for the current packet transmission
13557
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   961
1d9389d67836 wifi: Add support for 802.11 PCF
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 13532
diff changeset
   962
  CfAckInfo m_cfAckInfo; //!< Info about piggyback ACKs used in PCF
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   963
};
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   964
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11432
diff changeset
   965
} //namespace ns3
1922
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   966
dd18bc29fc3c add MacLow to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   967
#endif /* MAC_LOW_H */