src/wifi/model/wifi-remote-station-manager.cc
author Tom Henderson <tomh@tomh.org>
Wed, 06 May 2015 14:23:50 -0700
changeset 11388 e367c5bde0fa
parent 11384 935dc1cc08a4
child 11419 d118c95b966c
permissions -rw-r--r--
clear valgrind warnings for aggregation test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7227
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
1912
028e1945d5b2 fix copyright statement
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1911
diff changeset
     3
 * Copyright (c) 2005,2006,2007 INRIA
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 */
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
    21
#include <iostream>
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    22
#include "wifi-remote-station-manager.h"
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
    23
#include "ns3/simulator.h"
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
    24
#include "ns3/assert.h"
1980
3fa3bac40b5b add asserts and some debug log
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1975
diff changeset
    25
#include "ns3/log.h"
3041
a624276a897b mtag -> tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3040
diff changeset
    26
#include "ns3/tag.h"
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    27
#include "ns3/boolean.h"
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
    28
#include "ns3/double.h"
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    29
#include "ns3/uinteger.h"
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    30
#include "ns3/wifi-phy.h"
11059
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
    31
#include "ns3/wifi-mac.h"
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
    32
#include "ns3/trace-source-accessor.h"
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
    33
#include "wifi-mac-header.h"
6473
86a4a149eb0f bug 958 closed
Nicola Baldo <nbaldo@cttc.es>
parents: 6372
diff changeset
    34
#include "wifi-mac-trailer.h"
1980
3fa3bac40b5b add asserts and some debug log
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1975
diff changeset
    35
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
    36
/***************************************************************
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
    37
 *           Packet Mode Tagger
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    38
 ***************************************************************/
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
    39
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
    40
namespace ns3 {
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
    41
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10652
diff changeset
    42
NS_LOG_COMPONENT_DEFINE ("WifiRemoteStationManager");
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10652
diff changeset
    43
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    44
class HighLatencyDataTxVectorTag : public Tag
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
    45
{
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
    46
public:
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    47
  HighLatencyDataTxVectorTag ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    48
  HighLatencyDataTxVectorTag (WifiTxVector dataTxVector);
10424
9d29c9a5ddcb doxygen warnings for wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10410
diff changeset
    49
  /**
9d29c9a5ddcb doxygen warnings for wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10410
diff changeset
    50
   * \returns the transmission mode to use to send this packet
9d29c9a5ddcb doxygen warnings for wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10410
diff changeset
    51
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    52
  WifiTxVector GetDataTxVector (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    53
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    54
  static TypeId GetTypeId (void);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    55
  virtual TypeId GetInstanceTypeId (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    56
  virtual uint32_t GetSerializedSize (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    57
  virtual void Serialize (TagBuffer i) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    58
  virtual void Deserialize (TagBuffer i);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    59
  virtual void Print (std::ostream &os) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    60
private:
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    61
  WifiTxVector m_dataTxVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    62
};
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    63
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    64
HighLatencyDataTxVectorTag::HighLatencyDataTxVectorTag ()
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    65
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    66
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    67
HighLatencyDataTxVectorTag::HighLatencyDataTxVectorTag ( WifiTxVector dataTxVector)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    68
  : m_dataTxVector (dataTxVector)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    69
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    70
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    71
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    72
WifiTxVector 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    73
HighLatencyDataTxVectorTag::GetDataTxVector (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    74
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    75
  return m_dataTxVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    76
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    77
TypeId
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    78
HighLatencyDataTxVectorTag::GetTypeId (void)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    79
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    80
  static TypeId tid = TypeId ("ns3::HighLatencyDataTxVectorTag")
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    81
    .SetParent<Tag> ()
11245
5c781d7e5a25 SetGroupName for wifi module
Tom Henderson <tomh@tomh.org>
parents: 11159
diff changeset
    82
    .SetGroupName ("Wifi")
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    83
    .AddConstructor<HighLatencyDataTxVectorTag> ()  
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    84
    ;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    85
  return tid;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    86
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    87
TypeId
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    88
HighLatencyDataTxVectorTag::GetInstanceTypeId (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    89
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    90
  return GetTypeId ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    91
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    92
uint32_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    93
HighLatencyDataTxVectorTag::GetSerializedSize (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    94
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    95
  return sizeof (WifiTxVector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    96
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    97
void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    98
HighLatencyDataTxVectorTag::Serialize (TagBuffer i) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
    99
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   100
  i.Write ((uint8_t *)&m_dataTxVector, sizeof (WifiTxVector));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   101
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   102
void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   103
HighLatencyDataTxVectorTag::Deserialize (TagBuffer i)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   104
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   105
  i.Read ((uint8_t *)&m_dataTxVector, sizeof (WifiTxVector));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   106
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   107
void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   108
HighLatencyDataTxVectorTag::Print (std::ostream &os) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   109
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   110
  os << "Data=" << m_dataTxVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   111
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   112
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   113
class HighLatencyRtsTxVectorTag : public Tag
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   114
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   115
public:
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   116
  HighLatencyRtsTxVectorTag ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   117
  HighLatencyRtsTxVectorTag (WifiTxVector rtsTxVector);
10424
9d29c9a5ddcb doxygen warnings for wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10410
diff changeset
   118
  /**
9d29c9a5ddcb doxygen warnings for wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10410
diff changeset
   119
   * \returns the transmission mode to use to send the RTS prior to the
9d29c9a5ddcb doxygen warnings for wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10410
diff changeset
   120
   *          transmission of the data packet itself.
9d29c9a5ddcb doxygen warnings for wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10410
diff changeset
   121
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   122
  WifiTxVector GetRtsTxVector (void) const;
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   123
3038
5962e2962fa9 convert to new tag API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   124
  static TypeId GetTypeId (void);
5962e2962fa9 convert to new tag API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   125
  virtual TypeId GetInstanceTypeId (void) const;
5962e2962fa9 convert to new tag API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   126
  virtual uint32_t GetSerializedSize (void) const;
3040
e11e106c7c19 Mtag -> Tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3038
diff changeset
   127
  virtual void Serialize (TagBuffer i) const;
e11e106c7c19 Mtag -> Tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3038
diff changeset
   128
  virtual void Deserialize (TagBuffer i);
3208
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
   129
  virtual void Print (std::ostream &os) const;
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   130
private:
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   131
  WifiTxVector m_rtsTxVector;
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   132
};
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   133
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   134
HighLatencyRtsTxVectorTag::HighLatencyRtsTxVectorTag ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   135
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   136
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   137
HighLatencyRtsTxVectorTag::HighLatencyRtsTxVectorTag ( WifiTxVector rtsTxVector)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   138
  : m_rtsTxVector (rtsTxVector)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   139
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   140
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   141
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   142
WifiTxVector 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   143
HighLatencyRtsTxVectorTag::GetRtsTxVector (void) const
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   144
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   145
  return m_rtsTxVector;
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   146
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   147
TypeId
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   148
HighLatencyRtsTxVectorTag::GetTypeId (void)
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   149
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   150
  static TypeId tid = TypeId ("ns3::HighLatencyRtsTxVectorTag")
3040
e11e106c7c19 Mtag -> Tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3038
diff changeset
   151
    .SetParent<Tag> ()
11245
5c781d7e5a25 SetGroupName for wifi module
Tom Henderson <tomh@tomh.org>
parents: 11159
diff changeset
   152
    .SetGroupName ("Wifi")
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   153
    .AddConstructor<HighLatencyRtsTxVectorTag> ()  
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   154
    ;
3038
5962e2962fa9 convert to new tag API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   155
  return tid;
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   156
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   157
TypeId
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   158
HighLatencyRtsTxVectorTag::GetInstanceTypeId (void) const
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   159
{
3038
5962e2962fa9 convert to new tag API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   160
  return GetTypeId ();
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   161
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   162
uint32_t
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   163
HighLatencyRtsTxVectorTag::GetSerializedSize (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   164
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   165
  return sizeof (WifiTxVector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   166
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   167
void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   168
HighLatencyRtsTxVectorTag::Serialize (TagBuffer i) const
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   169
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   170
  i.Write ((uint8_t *)&m_rtsTxVector, sizeof (WifiTxVector));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   171
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   172
void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   173
HighLatencyRtsTxVectorTag::Deserialize (TagBuffer i)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   174
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   175
  i.Read ((uint8_t *)&m_rtsTxVector, sizeof (WifiTxVector));
3038
5962e2962fa9 convert to new tag API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   176
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   177
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   178
HighLatencyRtsTxVectorTag::Print (std::ostream &os) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   179
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   180
  os << "Rts=" << m_rtsTxVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   181
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   182
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   183
class HighLatencyCtsToSelfTxVectorTag : public Tag
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   184
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   185
public:
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   186
  HighLatencyCtsToSelfTxVectorTag ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   187
  HighLatencyCtsToSelfTxVectorTag (WifiTxVector ctsToSelfTxVector);
10424
9d29c9a5ddcb doxygen warnings for wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10410
diff changeset
   188
  /**
9d29c9a5ddcb doxygen warnings for wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10410
diff changeset
   189
   * \returns the transmission mode to use for the CTS-to-self.
9d29c9a5ddcb doxygen warnings for wifi module
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10410
diff changeset
   190
   */
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   191
  WifiTxVector GetCtsToSelfTxVector (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   192
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   193
  static TypeId GetTypeId (void);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   194
  virtual TypeId GetInstanceTypeId (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   195
  virtual uint32_t GetSerializedSize (void) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   196
  virtual void Serialize (TagBuffer i) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   197
  virtual void Deserialize (TagBuffer i);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   198
  virtual void Print (std::ostream &os) const;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   199
private:
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   200
  WifiTxVector m_ctsToSelfTxVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   201
};
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   202
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   203
HighLatencyCtsToSelfTxVectorTag::HighLatencyCtsToSelfTxVectorTag ()
3038
5962e2962fa9 convert to new tag API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   204
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   205
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   206
HighLatencyCtsToSelfTxVectorTag::HighLatencyCtsToSelfTxVectorTag ( WifiTxVector ctsToSelfTxVector)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   207
  : m_ctsToSelfTxVector (ctsToSelfTxVector)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   208
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   209
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   210
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   211
WifiTxVector 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   212
HighLatencyCtsToSelfTxVectorTag::GetCtsToSelfTxVector (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   213
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   214
  return m_ctsToSelfTxVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   215
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   216
TypeId
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   217
HighLatencyCtsToSelfTxVectorTag::GetTypeId (void)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   218
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   219
  static TypeId tid = TypeId ("ns3::HighLatencyCtsToSelfTxVectorTag")
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   220
    .SetParent<Tag> ()
11245
5c781d7e5a25 SetGroupName for wifi module
Tom Henderson <tomh@tomh.org>
parents: 11159
diff changeset
   221
    .SetGroupName ("Wifi")
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   222
    .AddConstructor<HighLatencyCtsToSelfTxVectorTag> ()  
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   223
    ;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   224
  return tid;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   225
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   226
TypeId
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   227
HighLatencyCtsToSelfTxVectorTag::GetInstanceTypeId (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   228
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   229
  return GetTypeId ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   230
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   231
uint32_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   232
HighLatencyCtsToSelfTxVectorTag::GetSerializedSize (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   233
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   234
  return sizeof (WifiTxVector);
3038
5962e2962fa9 convert to new tag API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   235
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   236
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   237
HighLatencyCtsToSelfTxVectorTag::Serialize (TagBuffer i) const
3038
5962e2962fa9 convert to new tag API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2965
diff changeset
   238
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   239
  i.Write ((uint8_t *)&m_ctsToSelfTxVector, sizeof (WifiTxVector));
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   240
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   241
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   242
HighLatencyCtsToSelfTxVectorTag::Deserialize (TagBuffer i)
3208
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
   243
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   244
  i.Read ((uint8_t *)&m_ctsToSelfTxVector, sizeof (WifiTxVector));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   245
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   246
void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   247
HighLatencyCtsToSelfTxVectorTag::Print (std::ostream &os) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   248
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   249
  os << "Cts To Self=" << m_ctsToSelfTxVector;
3208
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
   250
}
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   251
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   252
} // namespace ns3
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   253
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   254
namespace ns3 {
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   255
10652
dc18deba4502 [doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10580
diff changeset
   256
NS_OBJECT_ENSURE_REGISTERED (WifiRemoteStationManager);
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   257
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   258
TypeId
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   259
WifiRemoteStationManager::GetTypeId (void)
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
   260
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   261
  static TypeId tid = TypeId ("ns3::WifiRemoteStationManager")
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
   262
    .SetParent<Object> ()
11245
5c781d7e5a25 SetGroupName for wifi module
Tom Henderson <tomh@tomh.org>
parents: 11159
diff changeset
   263
    .SetGroupName ("Wifi")
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   264
    .AddAttribute ("IsLowLatency", "If true, we attempt to modelize a so-called low-latency device: a device"
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   265
                   " where decisions about tx parameters can be made on a per-packet basis and feedback about the"
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   266
                   " transmission of each packet is obtained before sending the next. Otherwise, we modelize a "
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   267
                   " high-latency device, that is a device where we cannot update our decision about tx parameters"
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   268
                   " after every packet transmission.",
6241
d9a65be745f0 Bug 802 - Minstrel, Onoe and Amrr not working
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6087
diff changeset
   269
                   BooleanValue (true), // this value is ignored because there is no setter
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   270
                   MakeBooleanAccessor (&WifiRemoteStationManager::IsLowLatency),
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   271
                   MakeBooleanChecker ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   272
    .AddAttribute ("MaxSsrc", "The maximum number of retransmission attempts for an RTS. This value"
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   273
                   " will not have any effect on some rate control algorithms.",
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   274
                   UintegerValue (7),
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   275
                   MakeUintegerAccessor (&WifiRemoteStationManager::m_maxSsrc),
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   276
                   MakeUintegerChecker<uint32_t> ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   277
    .AddAttribute ("MaxSlrc", "The maximum number of retransmission attempts for a DATA packet. This value"
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   278
                   " will not have any effect on some rate control algorithms.",
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   279
                   UintegerValue (7),
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   280
                   MakeUintegerAccessor (&WifiRemoteStationManager::m_maxSlrc),
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   281
                   MakeUintegerChecker<uint32_t> ())
6473
86a4a149eb0f bug 958 closed
Nicola Baldo <nbaldo@cttc.es>
parents: 6372
diff changeset
   282
    .AddAttribute ("RtsCtsThreshold", "If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than "
10580
2a29a9bd6fd6 Update (most of) IEEE Std 802.11-2007 to IEEE Std 802.11-2012
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10424
diff changeset
   283
                   "this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. "
6473
86a4a149eb0f bug 958 closed
Nicola Baldo <nbaldo@cttc.es>
parents: 6372
diff changeset
   284
                   "This value will not have any effect on some rate control algorithms.",
86a4a149eb0f bug 958 closed
Nicola Baldo <nbaldo@cttc.es>
parents: 6372
diff changeset
   285
                   UintegerValue (2346),
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   286
                   MakeUintegerAccessor (&WifiRemoteStationManager::m_rtsCtsThreshold),
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   287
                   MakeUintegerChecker<uint32_t> ())
6473
86a4a149eb0f bug 958 closed
Nicola Baldo <nbaldo@cttc.es>
parents: 6372
diff changeset
   288
    .AddAttribute ("FragmentationThreshold", "If the size of the data packet + LLC header + MAC header + FCS trailer is bigger"
86a4a149eb0f bug 958 closed
Nicola Baldo <nbaldo@cttc.es>
parents: 6372
diff changeset
   289
                   "than this value, we fragment it such that the size of the fragments are equal or smaller "
10580
2a29a9bd6fd6 Update (most of) IEEE Std 802.11-2007 to IEEE Std 802.11-2012
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10424
diff changeset
   290
                   "than this value, as per IEEE Std. 802.11-2012, Section 9.5. "
6473
86a4a149eb0f bug 958 closed
Nicola Baldo <nbaldo@cttc.es>
parents: 6372
diff changeset
   291
                   "This value will not have any effect on some rate control algorithms.",
86a4a149eb0f bug 958 closed
Nicola Baldo <nbaldo@cttc.es>
parents: 6372
diff changeset
   292
                   UintegerValue (2346),
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   293
                   MakeUintegerAccessor (&WifiRemoteStationManager::DoSetFragmentationThreshold,
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   294
                                         &WifiRemoteStationManager::DoGetFragmentationThreshold),
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   295
                   MakeUintegerChecker<uint32_t> ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   296
    .AddAttribute ("NonUnicastMode", "Wifi mode used for non-unicast transmissions.",
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   297
                   WifiModeValue (),
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   298
                   MakeWifiModeAccessor (&WifiRemoteStationManager::m_nonUnicastMode),
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   299
                   MakeWifiModeChecker ())
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   300
    .AddAttribute ("DefaultTxPowerLevel", "Default power level to be used for transmissions. "
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   301
                   "This is the power level that is used by all those WifiManagers that do not"
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   302
                   "implement TX power control.",
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   303
                   UintegerValue (0),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   304
                   MakeUintegerAccessor (&WifiRemoteStationManager::m_defaultTxPowerLevel),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   305
                   MakeUintegerChecker<uint8_t> ())
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   306
    .AddTraceSource ("MacTxRtsFailed",
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   307
                     "The transmission of a RTS by the MAC layer has failed",
11085
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11066
diff changeset
   308
                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxRtsFailed),
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11066
diff changeset
   309
                     "ns3::Mac48Address::TracedCallback")
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   310
    .AddTraceSource ("MacTxDataFailed",
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   311
                     "The transmission of a data packet by the MAC layer has failed",
11085
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11066
diff changeset
   312
                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxDataFailed),
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11066
diff changeset
   313
                     "ns3::Mac48Address::TracedCallback")
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   314
    .AddTraceSource ("MacTxFinalRtsFailed",
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   315
                     "The transmission of a RTS has exceeded the maximum number of attempts",
11085
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11066
diff changeset
   316
                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxFinalRtsFailed),
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11066
diff changeset
   317
                     "ns3::Mac48Address::TracedCallback")
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   318
    .AddTraceSource ("MacTxFinalDataFailed",
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   319
                     "The transmission of a data packet has exceeded the maximum number of attempts",
11085
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11066
diff changeset
   320
                     MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxFinalDataFailed),
6e4d08656d7c TracedCallback function signatures, the simple ones.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 11066
diff changeset
   321
                     "ns3::Mac48Address::TracedCallback")
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   322
  ;
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
   323
  return tid;
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
   324
}
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
   325
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   326
WifiRemoteStationManager::WifiRemoteStationManager ()
11388
e367c5bde0fa clear valgrind warnings for aggregation test
Tom Henderson <tomh@tomh.org>
parents: 11384
diff changeset
   327
 : m_htSupported (false)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   328
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   329
}
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   330
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   331
WifiRemoteStationManager::~WifiRemoteStationManager ()
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   332
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   333
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   334
void
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   335
WifiRemoteStationManager::DoDispose (void)
2003
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
   336
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   337
  for (StationStates::const_iterator i = m_states.begin (); i != m_states.end (); i++)
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   338
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   339
      delete (*i);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   340
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   341
  m_states.clear ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   342
  for (Stations::const_iterator i = m_stations.begin (); i != m_stations.end (); i++)
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   343
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   344
      delete (*i);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   345
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   346
  m_stations.clear ();
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   347
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   348
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   349
WifiRemoteStationManager::SetupPhy (Ptr<WifiPhy> phy)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   350
{
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   351
  // We need to track our PHY because it is the object that knows the
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   352
  // full set of transmit rates that are supported. We need to know
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   353
  // this in order to find the relevant mandatory rates when chosing a
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   354
  // transmit rate for automatic control responses like
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   355
  // acknowledgements.
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   356
  m_wifiPhy = phy;
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   357
  m_defaultTxMode = phy->GetMode (0);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   358
  if(HasHtSupported())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   359
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   360
       m_defaultTxMcs = phy->GetMcs (0);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   361
    }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   362
  else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   363
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   364
      m_defaultTxMcs = 0;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   365
    }
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   366
  Reset ();
2003
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
   367
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   368
void
11059
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
   369
WifiRemoteStationManager::SetupMac (Ptr<WifiMac> mac)
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
   370
{
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
   371
  // We need to track our MAC because it is the object that knows the
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
   372
  // full set of interframe spaces.
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
   373
  m_wifiMac = mac;
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
   374
  Reset ();
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
   375
}
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
   376
void
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   377
WifiRemoteStationManager::SetHtSupported (bool enable)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   378
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   379
  m_htSupported=enable;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   380
}
2003
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
   381
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   382
bool
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   383
WifiRemoteStationManager::HasHtSupported (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   384
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   385
  return m_htSupported;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   386
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   387
uint32_t
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   388
WifiRemoteStationManager::GetMaxSsrc (void) const
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   389
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   390
  return m_maxSsrc;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   391
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   392
uint32_t
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   393
WifiRemoteStationManager::GetMaxSlrc (void) const
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   394
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   395
  return m_maxSlrc;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   396
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   397
uint32_t
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   398
WifiRemoteStationManager::GetRtsCtsThreshold (void) const
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   399
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   400
  return m_rtsCtsThreshold;
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   401
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   402
uint32_t
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   403
WifiRemoteStationManager::GetFragmentationThreshold (void) const
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   404
{
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   405
  return DoGetFragmentationThreshold ();
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   406
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   407
void
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   408
WifiRemoteStationManager::SetMaxSsrc (uint32_t maxSsrc)
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   409
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   410
  m_maxSsrc = maxSsrc;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   411
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   412
void
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   413
WifiRemoteStationManager::SetMaxSlrc (uint32_t maxSlrc)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   414
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   415
  m_maxSlrc = maxSlrc;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   416
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   417
void
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   418
WifiRemoteStationManager::SetRtsCtsThreshold (uint32_t threshold)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   419
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   420
  m_rtsCtsThreshold = threshold;
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   421
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   422
void
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   423
WifiRemoteStationManager::SetFragmentationThreshold (uint32_t threshold)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   424
{
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   425
  DoSetFragmentationThreshold (threshold);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   426
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   427
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   428
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   429
WifiRemoteStationManager::Reset (Mac48Address address)
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   430
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   431
  NS_LOG_FUNCTION (this << address);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   432
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   433
  WifiRemoteStationState *state = LookupState (address);
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   434
  state->m_operationalRateSet.clear ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   435
  state->m_operationalMcsSet.clear ();
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   436
  AddSupportedMode (address, GetDefaultMode ());
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   437
  AddSupportedMcs(address,GetDefaultMcs());
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   438
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   439
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   440
WifiRemoteStationManager::AddSupportedMode (Mac48Address address, WifiMode mode)
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   441
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   442
  NS_LOG_FUNCTION (this << address << mode);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   443
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   444
  WifiRemoteStationState *state = LookupState (address);
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   445
  for (WifiModeListIterator i = state->m_operationalRateSet.begin (); i != state->m_operationalRateSet.end (); i++)
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   446
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   447
      if ((*i) == mode)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   448
        {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   449
          // already in.
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   450
          return;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   451
        }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   452
    }
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   453
  state->m_operationalRateSet.push_back (mode);
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   454
}
11159
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   455
void
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   456
WifiRemoteStationManager::AddAllSupportedModes (Mac48Address address)
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   457
{
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   458
  NS_ASSERT (!address.IsGroup ());
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   459
  WifiRemoteStationState *state = LookupState (address);
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   460
  state->m_operationalRateSet.clear ();
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   461
  for (uint32_t i = 0; i < m_wifiPhy->GetNModes (); i++)
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   462
    {
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   463
      state->m_operationalRateSet.push_back ( m_wifiPhy->GetMode (i));
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   464
    }
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   465
}
b744c32b69bc patch to support IEEE 1609.4 MAC extension in wave module
Junling Bu <linlinjavaer@gmail.com>
parents: 11100
diff changeset
   466
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   467
/*void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   468
WifiRemoteStationManager::AddBssMembershipParameters(Mac48Address address, uint32_t selector)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   469
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   470
  NS_ASSERT (!address.IsGroup ());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   471
  WifiRemoteStationState *state = LookupState (address);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   472
  WifiMode mode;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   473
  WifiModeList membershipselectormodes = m_wifiPhy->GetMembershipSelectorModes(selector);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   474
  for (WifiModeListIterator j = membershipselectormodes.begin (); j != membershipselectormodes.end (); j++)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   475
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   476
      mode=(*j);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   477
     for (WifiModeListIterator i = state->m_operationalRateSet.begin (); i != state->m_operationalRateSet.end (); i++)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   478
      {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   479
        if ((*i) == mode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   480
          {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   481
            // already in.
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   482
            break;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   483
          }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   484
      }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   485
    state->m_operationalRateSet.push_back (mode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   486
  }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   487
}*/
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   488
void 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   489
WifiRemoteStationManager::AddSupportedMcs (Mac48Address address, uint8_t mcs)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   490
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   491
  NS_LOG_FUNCTION (this << address << (uint16_t) mcs);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   492
  NS_ASSERT (!address.IsGroup ());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   493
  WifiRemoteStationState *state = LookupState (address);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   494
  for (WifiMcsListIterator i = state->m_operationalMcsSet.begin (); i != state->m_operationalMcsSet.end (); i++)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   495
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   496
      if ((*i) == mcs)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   497
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   498
          // already in.
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   499
          return;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   500
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   501
    }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   502
  state->m_operationalMcsSet.push_back (mcs);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   503
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   504
bool
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   505
WifiRemoteStationManager::IsBrandNew (Mac48Address address) const
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   506
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   507
  if (address.IsGroup ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   508
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   509
      return false;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   510
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   511
  return LookupState (address)->m_state == WifiRemoteStationState::BRAND_NEW;
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   512
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   513
bool
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   514
WifiRemoteStationManager::IsAssociated (Mac48Address address) const
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   515
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   516
  if (address.IsGroup ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   517
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   518
      return true;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   519
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   520
  return LookupState (address)->m_state == WifiRemoteStationState::GOT_ASSOC_TX_OK;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   521
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   522
bool
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   523
WifiRemoteStationManager::IsWaitAssocTxOk (Mac48Address address) const
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   524
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   525
  if (address.IsGroup ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   526
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   527
      return false;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   528
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   529
  return LookupState (address)->m_state == WifiRemoteStationState::WAIT_ASSOC_TX_OK;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   530
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   531
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   532
WifiRemoteStationManager::RecordWaitAssocTxOk (Mac48Address address)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   533
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   534
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   535
  LookupState (address)->m_state = WifiRemoteStationState::WAIT_ASSOC_TX_OK;
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   536
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   537
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   538
WifiRemoteStationManager::RecordGotAssocTxOk (Mac48Address address)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   539
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   540
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   541
  LookupState (address)->m_state = WifiRemoteStationState::GOT_ASSOC_TX_OK;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   542
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   543
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   544
WifiRemoteStationManager::RecordGotAssocTxFailed (Mac48Address address)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   545
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   546
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   547
  LookupState (address)->m_state = WifiRemoteStationState::DISASSOC;
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   548
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   549
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   550
WifiRemoteStationManager::RecordDisassociated (Mac48Address address)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   551
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   552
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   553
  LookupState (address)->m_state = WifiRemoteStationState::DISASSOC;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   554
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   555
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   556
WifiRemoteStationManager::PrepareForQueue (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   557
                                           Ptr<const Packet> packet, uint32_t fullPacketSize)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   558
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   559
  NS_LOG_FUNCTION (this << address << *header << packet << fullPacketSize);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   560
  if (IsLowLatency () || address.IsGroup ())
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   561
    {
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   562
      return;
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   563
    }
6241
d9a65be745f0 Bug 802 - Minstrel, Onoe and Amrr not working
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6087
diff changeset
   564
  WifiRemoteStation *station = Lookup (address, header);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   565
  WifiTxVector rts = DoGetRtsTxVector (station);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   566
  WifiTxVector data = DoGetDataTxVector (station, fullPacketSize); 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   567
  WifiTxVector ctstoself = DoGetCtsToSelfTxVector (); 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   568
  HighLatencyDataTxVectorTag datatag;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   569
  HighLatencyRtsTxVectorTag rtstag;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   570
  HighLatencyCtsToSelfTxVectorTag ctstoselftag;
6241
d9a65be745f0 Bug 802 - Minstrel, Onoe and Amrr not working
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6087
diff changeset
   571
  // first, make sure that the tag is not here anymore.
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   572
  ConstCast<Packet> (packet)->RemovePacketTag (datatag);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   573
  ConstCast<Packet> (packet)->RemovePacketTag (rtstag);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   574
  ConstCast<Packet> (packet)->RemovePacketTag (ctstoselftag);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   575
  datatag = HighLatencyDataTxVectorTag (data);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   576
  rtstag = HighLatencyRtsTxVectorTag (rts);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   577
  ctstoselftag = HighLatencyCtsToSelfTxVectorTag (ctstoself);
6241
d9a65be745f0 Bug 802 - Minstrel, Onoe and Amrr not working
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6087
diff changeset
   578
  // and then, add it back
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   579
  packet->AddPacketTag (datatag);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   580
  packet->AddPacketTag (rtstag);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   581
  packet->AddPacketTag (ctstoselftag);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   582
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   583
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   584
WifiRemoteStationManager::GetDataTxVector (Mac48Address address, const WifiMacHeader *header,
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   585
                                       Ptr<const Packet> packet, uint32_t fullPacketSize)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   586
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   587
  NS_LOG_FUNCTION (this << address << *header << packet << fullPacketSize);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   588
  if (address.IsGroup ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   589
    {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   590
      WifiTxVector v;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   591
      v.SetMode (GetNonUnicastMode ());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   592
      v.SetTxPowerLevel (m_defaultTxPowerLevel);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   593
      v.SetShortGuardInterval (false);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   594
      v.SetNss (1);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   595
      v.SetNess (0);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   596
      v.SetStbc (false);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   597
      return v;
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   598
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   599
  if (!IsLowLatency ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   600
    {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   601
      HighLatencyDataTxVectorTag datatag;
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   602
      bool found;
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   603
      found = ConstCast<Packet> (packet)->PeekPacketTag (datatag);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   604
      NS_ASSERT (found);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   605
      // cast found to void, to suppress 'found' set but not used
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   606
      // compiler warning
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   607
      (void) found;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   608
      return datatag.GetDataTxVector ();
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   609
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   610
  return DoGetDataTxVector (Lookup (address, header), fullPacketSize);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   611
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   612
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   613
WifiRemoteStationManager::GetCtsToSelfTxVector(const WifiMacHeader *header,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   614
                                      Ptr<const Packet> packet)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   615
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   616
  NS_LOG_FUNCTION (this << *header << packet);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   617
  if (!IsLowLatency ())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   618
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   619
      HighLatencyCtsToSelfTxVectorTag ctstoselftag;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   620
      bool found;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   621
      found = ConstCast<Packet> (packet)->PeekPacketTag (ctstoselftag);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   622
      NS_ASSERT (found);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   623
      // cast found to void, to suppress 'found' set but not used
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   624
      // compiler warning
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   625
      (void) found;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   626
      return ctstoselftag.GetCtsToSelfTxVector ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   627
    }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   628
  return DoGetCtsToSelfTxVector ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   629
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   630
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   631
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   632
WifiRemoteStationManager::DoGetCtsToSelfTxVector (void)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   633
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   634
  return WifiTxVector (GetDefaultMode(), GetDefaultTxPowerLevel (),0,m_wifiPhy->GetGuardInterval(),GetNumberOfTransmitAntennas(), GetNumberOfTransmitAntennas(), false);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   635
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   636
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   637
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   638
WifiRemoteStationManager::GetRtsTxVector (Mac48Address address, const WifiMacHeader *header,
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   639
                                      Ptr<const Packet> packet)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   640
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   641
  NS_LOG_FUNCTION (this << address << *header << packet);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   642
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   643
  if (!IsLowLatency ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   644
    {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   645
      HighLatencyRtsTxVectorTag rtstag;
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   646
      bool found;
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   647
      found = ConstCast<Packet> (packet)->PeekPacketTag (rtstag);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   648
      NS_ASSERT (found);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   649
      // cast found to void, to suppress 'found' set but not used
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   650
      // compiler warning
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   651
      (void) found;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   652
      return rtstag.GetRtsTxVector ();
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   653
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   654
  return DoGetRtsTxVector (Lookup (address, header));
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   655
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   656
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   657
WifiRemoteStationManager::ReportRtsFailed (Mac48Address address, const WifiMacHeader *header)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   658
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   659
  NS_LOG_FUNCTION (this << address << *header);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   660
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   661
  WifiRemoteStation *station = Lookup (address, header);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   662
  station->m_ssrc++;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   663
  m_macTxRtsFailed (address);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   664
  DoReportRtsFailed (station);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   665
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   666
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   667
WifiRemoteStationManager::ReportDataFailed (Mac48Address address, const WifiMacHeader *header)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   668
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   669
  NS_LOG_FUNCTION (this << address << *header);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   670
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   671
  WifiRemoteStation *station = Lookup (address, header);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   672
  station->m_slrc++;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   673
  m_macTxDataFailed (address);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   674
  DoReportDataFailed (station);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   675
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   676
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   677
WifiRemoteStationManager::ReportRtsOk (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   678
                                       double ctsSnr, WifiMode ctsMode, double rtsSnr)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   679
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   680
  NS_LOG_FUNCTION (this << address << *header << ctsSnr << ctsMode << rtsSnr);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   681
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   682
  WifiRemoteStation *station = Lookup (address, header);
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
   683
  station->m_state->m_info.NotifyTxSuccess (station->m_ssrc);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   684
  station->m_ssrc = 0;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   685
  DoReportRtsOk (station, ctsSnr, ctsMode, rtsSnr);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   686
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   687
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   688
WifiRemoteStationManager::ReportDataOk (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   689
                                        double ackSnr, WifiMode ackMode, double dataSnr)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   690
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   691
  NS_LOG_FUNCTION (this << address << *header << ackSnr << ackMode << dataSnr);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   692
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   693
  WifiRemoteStation *station = Lookup (address, header);
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
   694
  station->m_state->m_info.NotifyTxSuccess (station->m_slrc);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   695
  station->m_slrc = 0;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   696
  DoReportDataOk (station, ackSnr, ackMode, dataSnr);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   697
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   698
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   699
WifiRemoteStationManager::ReportFinalRtsFailed (Mac48Address address, const WifiMacHeader *header)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   700
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   701
  NS_LOG_FUNCTION (this << address << *header);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   702
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   703
  WifiRemoteStation *station = Lookup (address, header);
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
   704
  station->m_state->m_info.NotifyTxFailed ();
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   705
  station->m_ssrc = 0;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   706
  m_macTxFinalRtsFailed (address);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   707
  DoReportFinalRtsFailed (station);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   708
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   709
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   710
WifiRemoteStationManager::ReportFinalDataFailed (Mac48Address address, const WifiMacHeader *header)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   711
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   712
  NS_LOG_FUNCTION (this << address << *header);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   713
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   714
  WifiRemoteStation *station = Lookup (address, header);
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
   715
  station->m_state->m_info.NotifyTxFailed ();
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   716
  station->m_slrc = 0;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   717
  m_macTxFinalDataFailed (address);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   718
  DoReportFinalDataFailed (station);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   719
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   720
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   721
WifiRemoteStationManager::ReportRxOk (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   722
                                      double rxSnr, WifiMode txMode)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   723
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   724
  NS_LOG_FUNCTION (this << address << *header << rxSnr << txMode);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   725
  if (address.IsGroup ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   726
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   727
      return;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   728
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   729
  WifiRemoteStation *station = Lookup (address, header);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   730
  DoReportRxOk (station, rxSnr, txMode);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   731
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   732
bool
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   733
WifiRemoteStationManager::NeedRts (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   734
                                   Ptr<const Packet> packet)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   735
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   736
  NS_LOG_FUNCTION (this << address << *header << packet);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   737
  if (address.IsGroup ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   738
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   739
      return false;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   740
    }
6473
86a4a149eb0f bug 958 closed
Nicola Baldo <nbaldo@cttc.es>
parents: 6372
diff changeset
   741
  bool normally = (packet->GetSize () + header->GetSize () + WIFI_MAC_FCS_LENGTH) > GetRtsCtsThreshold ();
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   742
  return DoNeedRts (Lookup (address, header), packet, normally);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   743
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   744
bool
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   745
WifiRemoteStationManager::NeedCtsToSelf (WifiTxVector txVector)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   746
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   747
  NS_LOG_FUNCTION (this << txVector);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   748
  WifiMode mode = txVector.GetMode();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   749
 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   750
  // search the BSS Basic Rate set if the used mode in the basic set then no need for Cts to self
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   751
  for (WifiModeListIterator i = m_bssBasicRateSet.begin ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   752
       i != m_bssBasicRateSet.end (); i++)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   753
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   754
      if (mode == *i)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   755
        {
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   756
          NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning false");
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   757
          return false;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   758
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   759
    }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   760
  if (HasHtSupported())
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   761
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   762
      uint8_t mcs = m_wifiPhy->WifiModeToMcs (mode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   763
      for (WifiMcsListIterator i = m_bssBasicMcsSet.begin ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   764
           i != m_bssBasicMcsSet.end (); i++)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   765
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   766
          if (mcs == *i)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   767
            {
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   768
              NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning false");
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   769
              return false;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   770
            }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   771
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   772
    }
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   773
  NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning true");
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   774
  return true;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   775
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   776
bool
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   777
WifiRemoteStationManager::NeedRtsRetransmission (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   778
                                                 Ptr<const Packet> packet)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   779
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   780
  NS_LOG_FUNCTION (this << address << packet << *header);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   781
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   782
  WifiRemoteStation *station = Lookup (address, header);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   783
  bool normally = station->m_ssrc < GetMaxSsrc ();
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   784
  NS_LOG_DEBUG ("WifiRemoteStationManager::NeedDataRetransmission count: " << station->m_ssrc << " result: " << std::boolalpha << normally);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   785
  return DoNeedRtsRetransmission (station, packet, normally);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   786
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   787
bool
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   788
WifiRemoteStationManager::NeedDataRetransmission (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   789
                                                  Ptr<const Packet> packet)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   790
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   791
  NS_LOG_FUNCTION (this << address << packet << *header);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   792
  NS_ASSERT (!address.IsGroup ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   793
  WifiRemoteStation *station = Lookup (address, header);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   794
  bool normally = station->m_slrc < GetMaxSlrc ();
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   795
  NS_LOG_DEBUG ("WifiRemoteStationManager::NeedDataRetransmission count: " << station->m_slrc << " result: " << std::boolalpha << normally);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   796
  return DoNeedDataRetransmission (station, packet, normally);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   797
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   798
bool
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   799
WifiRemoteStationManager::NeedFragmentation (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   800
                                             Ptr<const Packet> packet)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   801
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   802
  NS_LOG_FUNCTION (this << address << packet << *header);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   803
  if (address.IsGroup ())
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   804
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   805
      return false;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   806
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   807
  WifiRemoteStation *station = Lookup (address, header);
6473
86a4a149eb0f bug 958 closed
Nicola Baldo <nbaldo@cttc.es>
parents: 6372
diff changeset
   808
  bool normally = (packet->GetSize () + header->GetSize () + WIFI_MAC_FCS_LENGTH) > GetFragmentationThreshold ();
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   809
  NS_LOG_DEBUG ("WifiRemoteStationManager::NeedFragmentation result: " << std::boolalpha << normally);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   810
  return DoNeedFragmentation (station, packet, normally);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   811
}
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   812
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   813
void
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   814
WifiRemoteStationManager::DoSetFragmentationThreshold (uint32_t threshold)
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   815
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   816
  NS_LOG_FUNCTION (this << threshold);
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   817
  if (threshold < 256)
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   818
    {
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   819
      /*
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   820
       * ASN.1 encoding of the MAC and PHY MIB (256 ... 8000)
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   821
       */
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   822
      NS_LOG_WARN ("Fragmentation threshold should be larger than 256. Setting to 256.");
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   823
      m_fragmentationThreshold = 256;
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   824
    }
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   825
  else
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   826
    {
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   827
      /*
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   828
       * The length of each fragment shall be an even number of octets, except for the last fragment if an MSDU or
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   829
       * MMPDU, which may be either an even or an odd number of octets.
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   830
       */
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   831
      if (threshold % 2 != 0)
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   832
        {
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   833
          NS_LOG_WARN ("Fragmentation threshold should be an even number. Setting to " << threshold - 1);
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   834
          m_fragmentationThreshold = threshold - 1; 
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   835
        }
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   836
      else
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   837
        {
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   838
          m_fragmentationThreshold = threshold;
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   839
        }
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   840
    }
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   841
}
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   842
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   843
uint32_t
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   844
WifiRemoteStationManager::DoGetFragmentationThreshold (void) const
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   845
{
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   846
  return m_fragmentationThreshold;
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   847
}
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   848
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   849
uint32_t
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   850
WifiRemoteStationManager::GetNFragments (const WifiMacHeader *header, Ptr<const Packet> packet)
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   851
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   852
  NS_LOG_FUNCTION (this << *header << packet);
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   853
  //The number of bytes a fragment can support is (Threshold - WIFI_HEADER_SIZE - WIFI_FCS).
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   854
  uint32_t nFragments = (packet->GetSize () / (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH));
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   855
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   856
  //If the size of the last fragment is not 0.
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   857
  if ((packet->GetSize () % (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH)) > 0)
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   858
    {
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   859
      nFragments++;
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   860
    }
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   861
  NS_LOG_DEBUG ("WifiRemoteStationManager::GetNFragments returning " << nFragments);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   862
  return nFragments;
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   863
}
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   864
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   865
uint32_t
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   866
WifiRemoteStationManager::GetFragmentSize (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   867
                                           Ptr<const Packet> packet, uint32_t fragmentNumber)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   868
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   869
  NS_LOG_FUNCTION (this << address << *header << packet << fragmentNumber);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   870
  NS_ASSERT (!address.IsGroup ());
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   871
  uint32_t nFragment = GetNFragments (header, packet);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   872
  if (fragmentNumber >= nFragment)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   873
    {
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   874
      NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentSize returning 0");
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   875
      return 0;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   876
    }
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   877
  //Last fragment
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   878
  if (fragmentNumber == nFragment - 1)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   879
    {
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   880
      uint32_t lastFragmentSize = packet->GetSize () - (fragmentNumber * (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH));
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   881
      NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentSize returning " << lastFragmentSize);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   882
      return lastFragmentSize;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   883
    }
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   884
  //All fragments but the last, the number of bytes is (Threshold - WIFI_HEADER_SIZE - WIFI_FCS).
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   885
  else
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   886
    {
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   887
      uint32_t fragmentSize = GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH;
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   888
      NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentSize returning " << fragmentSize);
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   889
      return fragmentSize;
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   890
    }
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   891
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   892
uint32_t
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   893
WifiRemoteStationManager::GetFragmentOffset (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   894
                                             Ptr<const Packet> packet, uint32_t fragmentNumber)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   895
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   896
  NS_LOG_FUNCTION (this << address << *header << packet << fragmentNumber);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   897
  NS_ASSERT (!address.IsGroup ());
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   898
  NS_ASSERT (fragmentNumber < GetNFragments (header, packet));
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   899
  uint32_t fragmentOffset = fragmentNumber * (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH);
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   900
  NS_LOG_DEBUG ("WifiRemoteStationManager::GetFragmentOffset returning " << fragmentOffset);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   901
  return fragmentOffset;
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   902
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   903
bool
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   904
WifiRemoteStationManager::IsLastFragment (Mac48Address address, const WifiMacHeader *header,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   905
                                          Ptr<const Packet> packet, uint32_t fragmentNumber)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   906
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   907
  NS_LOG_FUNCTION (this << address << *header << packet << fragmentNumber);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   908
  NS_ASSERT (!address.IsGroup ());
9165
7b219a73b844 Bug 1524 - WiFi fragmentation issue
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 9063
diff changeset
   909
  bool isLast = fragmentNumber == (GetNFragments (header, packet) - 1);
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   910
  NS_LOG_DEBUG ("WifiRemoteStationManager::IsLastFragment returning " << std::boolalpha << isLast);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   911
  return isLast;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   912
}
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   913
WifiMode
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   914
WifiRemoteStationManager::GetControlAnswerMode (Mac48Address address, WifiMode reqMode)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   915
{
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   916
  /**
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   917
   * The standard has relatively unambiguous rules for selecting a
10580
2a29a9bd6fd6 Update (most of) IEEE Std 802.11-2007 to IEEE Std 802.11-2012
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10424
diff changeset
   918
   * control response rate (the below is quoted from IEEE 802.11-2012,
2a29a9bd6fd6 Update (most of) IEEE Std 802.11-2007 to IEEE Std 802.11-2012
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10424
diff changeset
   919
   * Section 9.7):
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   920
   *
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   921
   *   To allow the transmitting STA to calculate the contents of the
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   922
   *   Duration/ID field, a STA responding to a received frame shall
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   923
   *   transmit its Control Response frame (either CTS or ACK), other
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   924
   *   than the BlockAck control frame, at the highest rate in the
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   925
   *   BSSBasicRateSet parameter that is less than or equal to the
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   926
   *   rate of the immediately previous frame in the frame exchange
10580
2a29a9bd6fd6 Update (most of) IEEE Std 802.11-2007 to IEEE Std 802.11-2012
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10424
diff changeset
   927
   *   sequence (as defined in Annex G) and that is of the same
2a29a9bd6fd6 Update (most of) IEEE Std 802.11-2007 to IEEE Std 802.11-2012
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10424
diff changeset
   928
   *   modulation class (see Section 9.7.8) as the received frame...
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   929
   */
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
   930
  NS_LOG_FUNCTION (this << address << reqMode);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
   931
  WifiMode mode = GetDefaultMode ();
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   932
  bool found = false;
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   933
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   934
  // First, search the BSS Basic Rate set
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   935
  for (WifiModeListIterator i = m_bssBasicRateSet.begin ();
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   936
       i != m_bssBasicRateSet.end (); i++)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   937
    {
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   938
      if ((!found || i->GetPhyRate () > mode.GetPhyRate ())
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: 11245
diff changeset
   939
          && (i->GetPhyRate () <= reqMode.GetPhyRate ())
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11245
diff changeset
   940
          && ((i->GetModulationClass () == reqMode.GetModulationClass ())
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11245
diff changeset
   941
              || (reqMode.GetModulationClass () == WIFI_MOD_CLASS_HT)))
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   942
        {
1930
ec22299cf6bb rework MacStations to handle correctly Supported vs Basic rate sets and add IdealMacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1913
diff changeset
   943
          mode = *i;
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   944
          // We've found a potentially-suitable transmit rate, but we
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   945
          // need to continue and consider all the basic rates before
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   946
          // we can be sure we've got the right one.
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   947
          found = true;
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   948
        }
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   949
    }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
   950
  if(HasHtSupported())
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: 11245
diff changeset
   951
    {
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11245
diff changeset
   952
      if (!found)
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11245
diff changeset
   953
        {
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11245
diff changeset
   954
          uint8_t mcs = GetDefaultMcs ();
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11245
diff changeset
   955
          mode = m_wifiPhy->McsToWifiMode (mcs);
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11245
diff changeset
   956
            
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11245
diff changeset
   957
          for (WifiMcsListIterator i = m_bssBasicMcsSet.begin ();
10207
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   958
             i != m_bssBasicMcsSet.end (); i++)
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   959
          {
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   960
            WifiMode thismode=  m_wifiPhy->McsToWifiMode (*i); 
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   961
            if ((!found || thismode.GetPhyRate () > mode.GetPhyRate ())
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   962
                && thismode.GetPhyRate () <= reqMode.GetPhyRate ()
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   963
                && thismode.GetModulationClass () == reqMode.GetModulationClass ())
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   964
              {
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   965
                mode = thismode;
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   966
                // We've found a potentially-suitable transmit rate, but we
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   967
                // need to continue and consider all the basic rates before
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   968
                // we can be sure we've got the right one.
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   969
                found = true;
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   970
              }
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   971
          }
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: 11245
diff changeset
   972
        }
10207
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
   973
      }
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   974
  // If we found a suitable rate in the BSSBasicRateSet, then we are
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   975
  // done and can return that mode.
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   976
  if (found)
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   977
    {
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: 11245
diff changeset
   978
      NS_LOG_DEBUG ("WifiRemoteStationManager::GetControlAnswerMode returning " << mode);
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   979
      return mode;
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   980
    }
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   981
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   982
  /**
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   983
   * If no suitable basic rate was found, we search the mandatory
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   984
   * rates. The standard (IEEE 802.11-2007, Section 9.6) says:
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   985
   *
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   986
   *   ...If no rate contained in the BSSBasicRateSet parameter meets
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   987
   *   these conditions, then the control frame sent in response to a
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   988
   *   received frame shall be transmitted at the highest mandatory
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   989
   *   rate of the PHY that is less than or equal to the rate of the
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   990
   *   received frame, and that is of the same modulation class as the
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   991
   *   received frame. In addition, the Control Response frame shall
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   992
   *   be sent using the same PHY options as the received frame,
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   993
   *   unless they conflict with the requirement to use the
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   994
   *   BSSBasicRateSet parameter.
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   995
   *
9870
6543f3876ff5 [Doxygen] use \todo
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9165
diff changeset
   996
   * \todo Note that we're ignoring the last sentence for now, because
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   997
   * there is not yet any manipulation here of PHY options.
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   998
   */
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
   999
  for (uint32_t idx = 0; idx < m_wifiPhy->GetNModes (); idx++)
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1000
    {
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1001
      WifiMode thismode = m_wifiPhy->GetMode (idx);
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1002
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1003
      /* If the rate:
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1004
       *
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1005
       *  - is a mandatory rate for the PHY, and
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1006
       *  - is equal to or faster than our current best choice, and
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1007
       *  - is less than or equal to the rate of the received frame, and
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1008
       *  - is of the same modulation class as the received frame
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1009
       *
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1010
       * ...then it's our best choice so far.
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1011
       */
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1012
      if (thismode.IsMandatory ()
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1013
          && (!found || thismode.GetPhyRate () > mode.GetPhyRate ())
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: 11245
diff changeset
  1014
          && (thismode.GetPhyRate () <= reqMode.GetPhyRate ())
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11245
diff changeset
  1015
          && ((thismode.GetModulationClass () == reqMode.GetModulationClass ()) ||
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11245
diff changeset
  1016
             (reqMode.GetModulationClass () == WIFI_MOD_CLASS_HT)))
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1017
        {
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1018
          mode = thismode;
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1019
          // As above; we've found a potentially-suitable transmit
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1020
          // rate, but we need to continue and consider all the
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1021
          // mandatory rates before we can be sure we've got the right
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1022
          // one.
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1023
          found = true;
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1024
        }
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1025
    }
10207
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1026
  if(HasHtSupported())
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1027
    {
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1028
      for (uint32_t idx = 0; idx < m_wifiPhy->GetNMcs (); idx++)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1029
        {
10207
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1030
          uint8_t thismcs = m_wifiPhy->GetMcs (idx);
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1031
          WifiMode thismode=  m_wifiPhy->McsToWifiMode (thismcs);
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1032
          if (thismode.IsMandatory ()
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1033
              && (!found || thismode.GetPhyRate () > mode.GetPhyRate ())
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1034
              && thismode.GetPhyRate () <= reqMode.GetPhyRate ()
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1035
              && thismode.GetModulationClass () == reqMode.GetModulationClass ())
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1036
            {
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1037
              mode = thismode;
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1038
              // As above; we've found a potentially-suitable transmit
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1039
              // rate, but we need to continue and consider all the
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1040
              // mandatory rates before we can be sure we've got the right
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1041
              // one.
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1042
              found = true;
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1043
            }
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1044
            
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1045
        }
10207
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1046
    }
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1047
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1048
  /**
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1049
   * If we still haven't found a suitable rate for the response then
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1050
   * someone has messed up the simulation config. This probably means
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1051
   * that the WifiPhyStandard is not set correctly, or that a rate that
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1052
   * is not supported by the PHY has been explicitly requested in a
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1053
   * WifiRemoteStationManager (or descendant) configuration.
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1054
   *
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1055
   * Either way, it is serious - we can either disobey the standard or
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1056
   * fail, and I have chosen to do the latter...
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1057
   */
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1058
  if (!found)
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1059
    {
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1060
      NS_FATAL_ERROR ("Can't find response rate for " << reqMode
10207
4c42c64f7ea8 Fixed indentation in wifi-remote-station-manager.cc
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10139
diff changeset
  1061
                      << ". Check standard and selected rates match.");
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1062
    }
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1063
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
  1064
  NS_LOG_DEBUG ("WifiRemoteStationManager::GetControlAnswerMode returning " << mode);
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
  1065
  return mode;
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
  1066
}
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
  1067
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1068
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1069
WifiRemoteStationManager::GetCtsTxVector (Mac48Address address, WifiMode rtsMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1070
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1071
  NS_ASSERT (!address.IsGroup ());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1072
  WifiTxVector v;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1073
  v.SetMode (GetControlAnswerMode (address, rtsMode));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1074
  v.SetTxPowerLevel (DoGetCtsTxPowerLevel (address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1075
  v.SetShortGuardInterval (DoGetCtsTxGuardInterval(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1076
  v.SetNss (DoGetCtsTxNss(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1077
  v.SetNess (DoGetCtsTxNess(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1078
  v.SetStbc (DoGetCtsTxStbc(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1079
  return v;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1080
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1081
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1082
WifiRemoteStationManager::GetAckTxVector (Mac48Address address, WifiMode dataMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1083
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1084
  NS_ASSERT (!address.IsGroup ());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1085
  WifiTxVector v;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1086
  v.SetMode (GetControlAnswerMode (address, dataMode));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1087
  v.SetTxPowerLevel (DoGetAckTxPowerLevel (address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1088
  v.SetShortGuardInterval(DoGetAckTxGuardInterval(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1089
  v.SetNss(DoGetAckTxNss(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1090
  v.SetNess(DoGetAckTxNess(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1091
  v.SetStbc(DoGetAckTxStbc(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1092
  return v;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1093
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1094
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1095
WifiRemoteStationManager::GetBlockAckTxVector (Mac48Address address, WifiMode blockAckReqMode)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
  1096
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1097
  NS_ASSERT (!address.IsGroup ());
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1098
  WifiTxVector v;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1099
  v.SetMode (GetControlAnswerMode (address, blockAckReqMode));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1100
  v.SetTxPowerLevel (DoGetBlockAckTxPowerLevel (address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1101
  v.SetShortGuardInterval (DoGetBlockAckTxGuardInterval(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1102
  v.SetNss (DoGetBlockAckTxNss(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1103
  v.SetNess (DoGetBlockAckTxNess(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1104
  v.SetStbc (DoGetBlockAckTxStbc(address, v.GetMode()));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1105
  return v;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1106
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1107
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1108
uint8_t 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1109
WifiRemoteStationManager::DoGetCtsTxPowerLevel (Mac48Address address, WifiMode ctsMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1110
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1111
  return m_defaultTxPowerLevel;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1112
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1113
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1114
bool 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1115
WifiRemoteStationManager::DoGetCtsTxGuardInterval(Mac48Address address, WifiMode ctsMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1116
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1117
  return m_wifiPhy->GetGuardInterval();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1118
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1119
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1120
uint8_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1121
WifiRemoteStationManager::DoGetCtsTxNss(Mac48Address address, WifiMode ctsMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1122
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1123
  return 1;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1124
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1125
uint8_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1126
WifiRemoteStationManager::DoGetCtsTxNess(Mac48Address address, WifiMode ctsMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1127
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1128
  return 0;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1129
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1130
bool 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1131
WifiRemoteStationManager::DoGetCtsTxStbc(Mac48Address address, WifiMode ctsMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1132
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1133
  return m_wifiPhy->GetStbc();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1134
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1135
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1136
uint8_t 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1137
WifiRemoteStationManager::DoGetAckTxPowerLevel (Mac48Address address, WifiMode ackMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1138
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1139
  return m_defaultTxPowerLevel;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1140
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1141
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1142
bool 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1143
WifiRemoteStationManager::DoGetAckTxGuardInterval(Mac48Address address, WifiMode ackMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1144
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1145
  return m_wifiPhy->GetGuardInterval();
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
  1146
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1147
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1148
uint8_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1149
WifiRemoteStationManager::DoGetAckTxNss(Mac48Address address, WifiMode ackMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1150
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1151
  return 1;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1152
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1153
uint8_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1154
WifiRemoteStationManager::DoGetAckTxNess(Mac48Address address, WifiMode ackMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1155
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1156
  return 0;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1157
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1158
bool 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1159
WifiRemoteStationManager::DoGetAckTxStbc(Mac48Address address, WifiMode ackMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1160
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1161
  return m_wifiPhy->GetStbc();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1162
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1163
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1164
uint8_t 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1165
WifiRemoteStationManager::DoGetBlockAckTxPowerLevel (Mac48Address address, WifiMode blockAckMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1166
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1167
  return m_defaultTxPowerLevel;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1168
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1169
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1170
bool 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1171
WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(Mac48Address address, WifiMode blockAckMode)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
  1172
{
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1173
  return m_wifiPhy->GetGuardInterval();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1174
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1175
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1176
uint8_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1177
WifiRemoteStationManager::DoGetBlockAckTxNss(Mac48Address address, WifiMode blockAckMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1178
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1179
  return 1;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1180
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1181
uint8_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1182
WifiRemoteStationManager::DoGetBlockAckTxNess(Mac48Address address, WifiMode blockAckMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1183
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1184
  return 0;
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
  1185
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1186
bool 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1187
WifiRemoteStationManager::DoGetBlockAckTxStbc(Mac48Address address, WifiMode blockAckMode)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1188
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1189
  return m_wifiPhy->GetStbc();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1190
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1191
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1192
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1193
uint8_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1194
WifiRemoteStationManager::GetDefaultTxPowerLevel (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1195
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1196
  return m_defaultTxPowerLevel;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1197
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1198
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
  1199
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1200
WifiRemoteStationInfo
6071
6a25c600c450 tweak slightly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6070
diff changeset
  1201
WifiRemoteStationManager::GetInfo (Mac48Address address)
6a25c600c450 tweak slightly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6070
diff changeset
  1202
{
6339
84cbcc1a3f16 fixed bug 922
Nicola Baldo <nbaldo@cttc.es>
parents: 6241
diff changeset
  1203
  WifiRemoteStationState *state = LookupState (address);
6071
6a25c600c450 tweak slightly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6070
diff changeset
  1204
  return state->m_info;
6a25c600c450 tweak slightly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6070
diff changeset
  1205
}
6a25c600c450 tweak slightly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6070
diff changeset
  1206
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1207
WifiRemoteStationState *
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1208
WifiRemoteStationManager::LookupState (Mac48Address address) const
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1209
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
  1210
  NS_LOG_FUNCTION (this << address);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1211
  for (StationStates::const_iterator i = m_states.begin (); i != m_states.end (); i++)
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1212
    {
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1213
      if ((*i)->m_address == address)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1214
        {
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
  1215
          NS_LOG_DEBUG ("WifiRemoteStationManager::LookupState returning existing state");
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1216
          return (*i);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1217
        }
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1218
    }
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1219
  WifiRemoteStationState *state = new WifiRemoteStationState ();
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1220
  state->m_state = WifiRemoteStationState::BRAND_NEW;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1221
  state->m_address = address;
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1222
  state->m_operationalRateSet.push_back (GetDefaultMode ());
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1223
  state->m_operationalMcsSet.push_back(GetDefaultMcs());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1224
  state->m_shortGuardInterval=m_wifiPhy->GetGuardInterval();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1225
  state->m_greenfield=m_wifiPhy->GetGreenfield();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1226
  state->m_rx=1;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1227
  state->m_tx=1;
11100
86e53d8a4cfe bug 2026: 802.11n Ness parameter badly set for data frames
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11085
diff changeset
  1228
  state->m_ness=0;
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1229
  state->m_stbc=false;
6067
ccbdc2b19ea5 add newly-created state to state list.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6065
diff changeset
  1230
  const_cast<WifiRemoteStationManager *> (this)->m_states.push_back (state);
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
  1231
  NS_LOG_DEBUG ("WifiRemoteStationManager::LookupState returning new state");
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1232
  return state;
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1233
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1234
WifiRemoteStation *
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1235
WifiRemoteStationManager::Lookup (Mac48Address address, const WifiMacHeader *header) const
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1236
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1237
  uint8_t tid;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1238
  if (header->IsQosData ())
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1239
    {
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1240
      tid = header->GetQosTid ();
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1241
    }
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1242
  else
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1243
    {
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1244
      tid = 0;
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1245
    }
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1246
  return Lookup (address, tid);
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1247
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1248
WifiRemoteStation *
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1249
WifiRemoteStationManager::Lookup (Mac48Address address, uint8_t tid) const
3745
73e7bb607014 bug 372: fragmentation is broken
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3212
diff changeset
  1250
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
  1251
  NS_LOG_FUNCTION (this << address << (uint16_t) tid);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1252
  for (Stations::const_iterator i = m_stations.begin (); i != m_stations.end (); i++)
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1253
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1254
      if ((*i)->m_tid == tid
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1255
          && (*i)->m_state->m_address == address)
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1256
        {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1257
          return (*i);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1258
        }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1259
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1260
  WifiRemoteStationState *state = LookupState (address);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1261
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1262
  WifiRemoteStation *station = DoCreateStation ();
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1263
  station->m_state = state;
6087
2c4e9171497e Simple bug of WifiRemoteStationManager: station's tid is not initialized.
Kirill Andreev <andreev@iitp.ru>
parents: 6071
diff changeset
  1264
  station->m_tid = tid;
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1265
  station->m_ssrc = 0;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1266
  station->m_slrc = 0;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1267
  // XXX
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1268
  const_cast<WifiRemoteStationManager *> (this)->m_stations.push_back (station);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1269
  return station;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1270
3745
73e7bb607014 bug 372: fragmentation is broken
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3212
diff changeset
  1271
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1272
//Used by all stations to record HT capabilities of remote stations
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1273
void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1274
WifiRemoteStationManager::AddStationHtCapabilities (Mac48Address from, HtCapabilities htcapabilities)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1275
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
  1276
  NS_LOG_FUNCTION (this << from << htcapabilities);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1277
  WifiRemoteStationState *state;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1278
  state=LookupState (from);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1279
  state->m_shortGuardInterval=htcapabilities.GetShortGuardInterval20();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1280
  state->m_greenfield=htcapabilities.GetGreenfield();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1281
 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1282
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1283
//Used by mac low to choose format used GF, MF or Non HT
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1284
bool 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1285
WifiRemoteStationManager::GetGreenfieldSupported (Mac48Address address) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1286
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1287
 return LookupState(address)->m_greenfield;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1288
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1289
WifiMode
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1290
WifiRemoteStationManager::GetDefaultMode (void) const
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1291
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1292
  return m_defaultTxMode;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1293
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1294
uint8_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1295
WifiRemoteStationManager::GetDefaultMcs (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1296
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1297
  return m_defaultTxMcs;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1298
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1299
void
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1300
WifiRemoteStationManager::Reset (void)
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1301
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
  1302
  NS_LOG_FUNCTION (this);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1303
  for (Stations::const_iterator i = m_stations.begin (); i != m_stations.end (); i++)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1304
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1305
      delete (*i);
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1306
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1307
  m_stations.clear ();
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1308
  m_bssBasicRateSet.clear ();
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1309
  m_bssBasicRateSet.push_back (m_defaultTxMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1310
  m_bssBasicMcsSet.clear();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1311
  m_bssBasicMcsSet.push_back (m_defaultTxMcs);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1312
  NS_ASSERT (m_defaultTxMode.IsMandatory ());
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1313
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1314
void
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1315
WifiRemoteStationManager::AddBasicMode (WifiMode mode)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1316
{
11064
a0562c615abc add logging to WifiRemoteStationManager
Tom Henderson <tomh@tomh.org>
parents: 11059
diff changeset
  1317
  NS_LOG_FUNCTION (this << mode);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1318
  for (uint32_t i = 0; i < GetNBasicModes (); i++)
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1319
    {
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1320
      if (GetBasicMode (i) == mode)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1321
        {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1322
          return;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1323
        }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1324
    }
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1325
  m_bssBasicRateSet.push_back (mode);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1326
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1327
uint32_t
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1328
WifiRemoteStationManager::GetNBasicModes (void) const
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1329
{
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1330
  return m_bssBasicRateSet.size ();
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1331
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1332
WifiMode
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1333
WifiRemoteStationManager::GetBasicMode (uint32_t i) const
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1334
{
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1335
  NS_ASSERT (i < m_bssBasicRateSet.size ());
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1336
  return m_bssBasicRateSet[i];
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1337
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1338
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1339
void 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1340
WifiRemoteStationManager::AddBasicMcs (uint8_t mcs)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1341
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1342
   for (uint32_t i = 0; i < GetNBasicMcs (); i++)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1343
    {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1344
      if (GetBasicMcs (i) == mcs)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1345
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1346
          return;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1347
        }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1348
    }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1349
  m_bssBasicMcsSet.push_back (mcs);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1350
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1351
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1352
uint32_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1353
WifiRemoteStationManager::GetNBasicMcs (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1354
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1355
  return m_bssBasicMcsSet.size ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1356
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1357
uint8_t 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1358
WifiRemoteStationManager::GetBasicMcs (uint32_t i) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1359
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1360
   NS_ASSERT (i < m_bssBasicMcsSet.size ());
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1361
  return m_bssBasicMcsSet[i];
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1362
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1363
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1364
WifiMode
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1365
WifiRemoteStationManager::GetNonUnicastMode (void) const
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1366
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1367
  if (m_nonUnicastMode == WifiMode ())
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1368
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1369
      return GetBasicMode (0);
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1370
    }
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1371
  else
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1372
    {
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1373
      return m_nonUnicastMode;
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1374
    }
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
  1375
}
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
  1376
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1377
bool
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1378
WifiRemoteStationManager::DoNeedRts (WifiRemoteStation *station,
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1379
                                     Ptr<const Packet> packet, bool normally)
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1380
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1381
  return normally;
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1382
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1383
bool
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1384
WifiRemoteStationManager::DoNeedRtsRetransmission (WifiRemoteStation *station,
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1385
                                                   Ptr<const Packet> packet, bool normally)
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1386
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1387
  return normally;
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1388
}
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1389
bool
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1390
WifiRemoteStationManager::DoNeedDataRetransmission (WifiRemoteStation *station,
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1391
                                                    Ptr<const Packet> packet, bool normally)
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1392
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1393
  return normally;
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1394
}
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1395
bool
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1396
WifiRemoteStationManager::DoNeedFragmentation (WifiRemoteStation *station,
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1397
                                               Ptr<const Packet> packet, bool normally)
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1398
{
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1399
  return normally;
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1400
}
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1401
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1402
WifiMode
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1403
WifiRemoteStationManager::GetSupported (const WifiRemoteStation *station, uint32_t i) const
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1404
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1405
  NS_ASSERT (i < GetNSupported (station));
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1406
  return station->m_state->m_operationalRateSet[i];
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1407
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1408
uint8_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1409
WifiRemoteStationManager::GetMcsSupported (const WifiRemoteStation *station, uint32_t i) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1410
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1411
  NS_ASSERT (i < GetNMcsSupported (station));
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1412
  return station->m_state->m_operationalMcsSet[i];
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1413
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1414
bool 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1415
WifiRemoteStationManager::GetShortGuardInterval (const WifiRemoteStation *station) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1416
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1417
  return station->m_state->m_shortGuardInterval;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1418
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1419
bool 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1420
WifiRemoteStationManager::GetGreenfield (const WifiRemoteStation *station) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1421
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1422
  return station->m_state->m_greenfield;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1423
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1424
bool 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1425
WifiRemoteStationManager::GetStbc (const WifiRemoteStation *station) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1426
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1427
  return station->m_state->m_stbc;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1428
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1429
uint32_t 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1430
WifiRemoteStationManager::GetNumberOfReceiveAntennas (const WifiRemoteStation *station) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1431
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1432
  return station->m_state->m_rx;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1433
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1434
uint32_t 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1435
WifiRemoteStationManager::GetNumberOfTransmitAntennas (const WifiRemoteStation *station) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1436
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1437
  return station->m_state->m_tx;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1438
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1439
uint32_t 
11100
86e53d8a4cfe bug 2026: 802.11n Ness parameter badly set for data frames
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11085
diff changeset
  1440
WifiRemoteStationManager::GetNess (const WifiRemoteStation *station) const
86e53d8a4cfe bug 2026: 802.11n Ness parameter badly set for data frames
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11085
diff changeset
  1441
{
86e53d8a4cfe bug 2026: 802.11n Ness parameter badly set for data frames
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11085
diff changeset
  1442
  return station->m_state->m_ness;
86e53d8a4cfe bug 2026: 802.11n Ness parameter badly set for data frames
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11085
diff changeset
  1443
}
86e53d8a4cfe bug 2026: 802.11n Ness parameter badly set for data frames
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11085
diff changeset
  1444
uint32_t 
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1445
WifiRemoteStationManager::GetShortRetryCount (const WifiRemoteStation *station) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1446
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1447
  return station->m_ssrc;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1448
}
11059
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1449
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1450
Ptr<WifiPhy>
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1451
WifiRemoteStationManager::GetPhy (void) const
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1452
{
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1453
  return m_wifiPhy;
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1454
}
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1455
Ptr<WifiMac>
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1456
WifiRemoteStationManager::GetMac (void) const
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1457
{
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1458
  return m_wifiMac;
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1459
}
2fe905238013 bug 1726: minstrel rate manager doesn't save state (patch contributions also due to Jonathan Ling and Matías Richart)
Daniel Lertpratchya <nikkipui@gmail.com>
parents: 10968
diff changeset
  1460
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1461
uint32_t 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1462
WifiRemoteStationManager::GetLongRetryCount (const WifiRemoteStation *station) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1463
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1464
  return station->m_slrc;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1465
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1466
uint32_t
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5166
diff changeset
  1467
WifiRemoteStationManager::GetNSupported (const WifiRemoteStation *station) const
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1468
{
6372
0fafd9716f44 Bug 853: Consider mandatory rates for Wi-Fi control responses
Dean Armstrong <deanarm@gmail.com>
parents: 6360
diff changeset
  1469
  return station->m_state->m_operationalRateSet.size ();
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1470
}
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1471
uint32_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1472
WifiRemoteStationManager::GetNMcsSupported (const WifiRemoteStation *station) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1473
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1474
  return station->m_state->m_operationalMcsSet.size ();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1475
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1476
void
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1477
WifiRemoteStationManager::SetDefaultTxPowerLevel (uint8_t txPower)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1478
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1479
  m_defaultTxPowerLevel = txPower;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1480
}
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1481
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1482
//support 11n
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1483
uint32_t
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1484
WifiRemoteStationManager::GetNumberOfTransmitAntennas (void)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1485
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1486
  return m_wifiPhy->GetNumberOfTransmitAntennas();
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9870
diff changeset
  1487
}
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1488
//WifiRemoteStationInfo constructor
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1489
WifiRemoteStationInfo::WifiRemoteStationInfo ()
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1490
  : m_memoryTime (Seconds (1.0)),
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1491
    m_lastUpdate (Seconds (0.0)),
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1492
    m_failAvg (0.0)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1493
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
  1494
}
2784
49006cbbfac7 GetMaxSsrc -> NeedRtsTransmission and GetMaxSlrc -> NeedDataRetransmission
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2602
diff changeset
  1495
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1496
double
6070
a971811bb21a fix typo
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6069
diff changeset
  1497
WifiRemoteStationInfo::CalculateAveragingCoefficient ()
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1498
{
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7704
diff changeset
  1499
  double retval = std::exp ((double)(m_lastUpdate.GetMicroSeconds () - Simulator::Now ().GetMicroSeconds ())
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 7704
diff changeset
  1500
                            / (double)m_memoryTime.GetMicroSeconds ());
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1501
  m_lastUpdate = Simulator::Now ();
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1502
  return retval;
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1503
}
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1504
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1505
void
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1506
WifiRemoteStationInfo::NotifyTxSuccess (uint32_t retryCounter)
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1507
{
6071
6a25c600c450 tweak slightly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6070
diff changeset
  1508
  double coefficient = CalculateAveragingCoefficient ();
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1509
  m_failAvg = (double)retryCounter / (1 + (double) retryCounter) * (1.0 - coefficient) + coefficient * m_failAvg;
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1510
}
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1511
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1512
void
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1513
WifiRemoteStationInfo::NotifyTxFailed ()
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1514
{
6071
6a25c600c450 tweak slightly
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6070
diff changeset
  1515
  double coefficient = CalculateAveragingCoefficient ();
6069
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1516
  m_failAvg = (1.0 - coefficient) + coefficient * m_failAvg;
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1517
}
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1518
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1519
double
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1520
WifiRemoteStationInfo::GetFrameErrorRate () const
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1521
{
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1522
  return m_failAvg;
c21754b56036 change airtime metric to work with new wifi remote station manager
Kirill Andreev <andreev@iitp.ru>
parents: 6067
diff changeset
  1523
}
11066
d78d77e4b920 WifiRemoteStation needs virtual destructor for subclassing
Tom Henderson <tomh@tomh.org>
parents: 11064
diff changeset
  1524
d78d77e4b920 WifiRemoteStation needs virtual destructor for subclassing
Tom Henderson <tomh@tomh.org>
parents: 11064
diff changeset
  1525
WifiRemoteStation::~WifiRemoteStation ()
d78d77e4b920 WifiRemoteStation needs virtual destructor for subclassing
Tom Henderson <tomh@tomh.org>
parents: 11064
diff changeset
  1526
{
d78d77e4b920 WifiRemoteStation needs virtual destructor for subclassing
Tom Henderson <tomh@tomh.org>
parents: 11064
diff changeset
  1527
  NS_LOG_FUNCTION (this);
d78d77e4b920 WifiRemoteStation needs virtual destructor for subclassing
Tom Henderson <tomh@tomh.org>
parents: 11064
diff changeset
  1528
}
d78d77e4b920 WifiRemoteStation needs virtual destructor for subclassing
Tom Henderson <tomh@tomh.org>
parents: 11064
diff changeset
  1529
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
  1530
} // namespace ns3