src/devices/wifi/wifi-remote-station-manager.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 03 Mar 2008 01:58:57 +0100
changeset 2542 a9b88fdc09d6
parent 2530 05f9cec44621
child 2602 d9262bff6df2
permissions -rw-r--r--
kill TraceResolver et al.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
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
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as 
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
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    21
#include "wifi-remote-station-manager.h"
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
    22
#include "ns3/assert.h"
1980
3fa3bac40b5b add asserts and some debug log
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1975
diff changeset
    23
#include "ns3/log.h"
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
    24
#include "ns3/tag.h"
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    25
#include "ns3/boolean.h"
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    26
#include "ns3/uinteger.h"
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    27
#include "ns3/wifi-phy.h"
1980
3fa3bac40b5b add asserts and some debug log
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1975
diff changeset
    28
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    29
NS_LOG_COMPONENT_DEFINE ("WifiRemoteStationManager");
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
namespace ns3 {
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    33
/**
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    34
 * _all_ broadcast and multicast frames are transmitted
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    35
 * at the same constant default rate because since we don't
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    36
 * have any kind of feedback from their transmission,
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    37
 * we cannot adjust the rate, so, we pick one which ensures
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    38
 * that all frames reach destination.
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    39
 */
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    40
class NonUnicastWifiRemoteStation : public WifiRemoteStation
1908
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
    41
{
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
    42
public:
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    43
  NonUnicastWifiRemoteStation (Ptr<WifiRemoteStationManager> stations);
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    44
  virtual void ReportRxOk (double rxSnr, WifiMode txMode);
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    45
  virtual void ReportRtsFailed (void);
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    46
  virtual void ReportDataFailed (void);
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    47
  virtual void ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr);
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    48
  virtual void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr);
2269
06c660ffc070 add MacStation::ReportFinal* methods for onoe rate control model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
    49
  virtual void ReportFinalRtsFailed (void);
06c660ffc070 add MacStation::ReportFinal* methods for onoe rate control model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
    50
  virtual void ReportFinalDataFailed (void);
06c660ffc070 add MacStation::ReportFinal* methods for onoe rate control model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
    51
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
    52
private:
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    53
  virtual Ptr<WifiRemoteStationManager> GetManager (void) const;
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
    54
  virtual WifiMode DoGetDataMode (uint32_t size);
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
    55
  virtual WifiMode DoGetRtsMode (void);
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    56
  Ptr<WifiRemoteStationManager> m_stations;
1908
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
    57
};
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
    58
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    59
NonUnicastWifiRemoteStation::NonUnicastWifiRemoteStation (Ptr<WifiRemoteStationManager> stations)
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
    60
  : m_stations (stations)
2003
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
    61
{
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
    62
  RecordDisassociated ();
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
    63
}
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    64
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    65
NonUnicastWifiRemoteStation::ReportRxOk (double rxSnr, WifiMode txMode)
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    66
{
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    67
  NS_ASSERT (false);
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    68
}
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    69
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    70
NonUnicastWifiRemoteStation::ReportRtsFailed (void)
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    71
{
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    72
  NS_ASSERT (false);
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    73
}
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    74
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    75
NonUnicastWifiRemoteStation::ReportDataFailed (void)
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    76
{
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    77
  NS_ASSERT (false);
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    78
}
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    79
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    80
NonUnicastWifiRemoteStation::ReportRtsOk (double ctsSnr, WifiMode ctsMode, double rtsSnr)
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    81
{
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    82
  NS_ASSERT (false);
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    83
}
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    84
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    85
NonUnicastWifiRemoteStation::ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr)
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    86
{
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    87
  NS_ASSERT (false);
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    88
}
2269
06c660ffc070 add MacStation::ReportFinal* methods for onoe rate control model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
    89
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    90
NonUnicastWifiRemoteStation::ReportFinalRtsFailed (void)
2269
06c660ffc070 add MacStation::ReportFinal* methods for onoe rate control model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
    91
{}
06c660ffc070 add MacStation::ReportFinal* methods for onoe rate control model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
    92
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    93
NonUnicastWifiRemoteStation::ReportFinalDataFailed (void)
2269
06c660ffc070 add MacStation::ReportFinal* methods for onoe rate control model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
    94
{}
06c660ffc070 add MacStation::ReportFinal* methods for onoe rate control model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2268
diff changeset
    95
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    96
WifiMode 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
    97
NonUnicastWifiRemoteStation::DoGetDataMode (uint32_t size)
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
    98
{
1980
3fa3bac40b5b add asserts and some debug log
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1975
diff changeset
    99
  WifiMode mode = m_stations->GetBasicMode (0);
3fa3bac40b5b add asserts and some debug log
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1975
diff changeset
   100
  NS_LOG_DEBUG ("non-unicast size="<<size<<", mode="<<mode);
3fa3bac40b5b add asserts and some debug log
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1975
diff changeset
   101
  return mode;
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   102
}
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   103
WifiMode 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   104
NonUnicastWifiRemoteStation::DoGetRtsMode (void)
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   105
{
1980
3fa3bac40b5b add asserts and some debug log
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1975
diff changeset
   106
  NS_ASSERT (false);
3fa3bac40b5b add asserts and some debug log
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1975
diff changeset
   107
  // theoretically, no rts for broadcast/multicast packets.
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
   108
  return m_stations->GetBasicMode (0);
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
   109
}
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   110
Ptr<WifiRemoteStationManager>
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   111
NonUnicastWifiRemoteStation::GetManager (void) const
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
   112
{
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
   113
  return m_stations;
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   114
}
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   115
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   116
1908
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   117
} // namespace ns3
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   118
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   119
namespace ns3 {
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   120
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   121
NS_OBJECT_ENSURE_REGISTERED (WifiRemoteStationManager);
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   122
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   123
TypeId 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   124
WifiRemoteStationManager::GetTypeId (void)
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
   125
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   126
  static TypeId tid = TypeId ("WifiRemoteStationManager")
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   127
    .SetParent<Object> ()
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   128
    .AddAttribute ("IsLowLatency", "XXX",
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   129
                   Boolean (true),
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   130
                   MakeBooleanAccessor (&WifiRemoteStationManager::m_isLowLatency),
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   131
                   MakeBooleanChecker ())
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   132
    .AddAttribute ("MaxSsrc", "XXX",
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   133
                   Uinteger (7),
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   134
                   MakeUintegerAccessor (&WifiRemoteStationManager::m_maxSsrc),
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   135
                   MakeUintegerChecker<uint32_t> ())
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   136
    .AddAttribute ("MaxSlrc", "XXX",
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   137
                   Uinteger (7),
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   138
                   MakeUintegerAccessor (&WifiRemoteStationManager::m_maxSlrc),
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   139
                   MakeUintegerChecker<uint32_t> ())
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   140
    .AddAttribute ("RtsCtsThreshold", "XXX",
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   141
                   Uinteger (1500),
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   142
                   MakeUintegerAccessor (&WifiRemoteStationManager::m_rtsCtsThreshold),
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   143
                   MakeUintegerChecker<uint32_t> ())
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   144
    .AddAttribute ("FragmentationThreshold", "XXX",
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   145
                   Uinteger (1500),
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   146
                   MakeUintegerAccessor (&WifiRemoteStationManager::m_fragmentationThreshold),
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   147
                   MakeUintegerChecker<uint32_t> ())
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   148
    ;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   149
  return tid;
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
   150
}
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   152
WifiRemoteStationManager::WifiRemoteStationManager ()
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   153
  : m_nonUnicast (new NonUnicastWifiRemoteStation (this))
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   154
{}
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   155
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   156
WifiRemoteStationManager::~WifiRemoteStationManager ()
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
{
2530
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   158
}
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   159
void 
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   160
WifiRemoteStationManager::DoDispose (void)
05f9cec44621 avoid memory leaks
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2524
diff changeset
   161
{
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
   162
  for (Stations::const_iterator i = m_stations.begin (); i != m_stations.end (); i++) 
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
    {
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
      delete (*i).second;
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   165
    }
1908
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   166
  m_stations.clear ();
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   167
  delete m_nonUnicast;
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
}
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   169
void
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   170
WifiRemoteStationManager::SetupPhy (Ptr<WifiPhy> phy)
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   171
{
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   172
  m_defaultTxMode = phy->GetMode (0);
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   173
  Reset ();
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   174
}
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   176
uint32_t 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   177
WifiRemoteStationManager::GetMaxSsrc (void) const
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   178
{
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   179
  return m_maxSsrc;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   180
}
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   181
uint32_t 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   182
WifiRemoteStationManager::GetMaxSlrc (void) const
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   183
{
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   184
  return m_maxSlrc;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   185
}
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   186
uint32_t 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   187
WifiRemoteStationManager::GetRtsCtsThreshold (void) const
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   188
{
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   189
  return m_rtsCtsThreshold;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   190
}
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   191
uint32_t 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   192
WifiRemoteStationManager::GetFragmentationThreshold (void) const
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   193
{
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   194
  return m_fragmentationThreshold;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   195
}
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   196
void 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   197
WifiRemoteStationManager::SetMaxSsrc (uint32_t maxSsrc)
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   198
{
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   199
  m_maxSsrc = maxSsrc;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   200
}
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   201
void 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   202
WifiRemoteStationManager::SetMaxSlrc (uint32_t maxSlrc)
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   203
{
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   204
  m_maxSlrc = maxSlrc;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   205
}
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   206
void 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   207
WifiRemoteStationManager::SetRtsCtsThreshold (uint32_t threshold)
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   208
{
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   209
  m_rtsCtsThreshold = threshold;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   210
}
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   211
void 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   212
WifiRemoteStationManager::SetFragmentationThreshold (uint32_t threshold)
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   213
{
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   214
  m_fragmentationThreshold = threshold;
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   215
} 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   216
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   217
WifiRemoteStation *
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   218
WifiRemoteStationManager::Lookup (Mac48Address address)
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
{
1908
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   220
  if (address.IsBroadcast () ||
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   221
      address.IsMulticast ())
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   222
    {
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   223
      return m_nonUnicast;
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   224
    }
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
   225
  for (Stations::const_iterator i = m_stations.begin (); i != m_stations.end (); i++) 
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
    {
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
      if ((*i).first == address)
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
        {
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
          return (*i).second;
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
        }
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
    }
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   232
  WifiRemoteStation *station = CreateStation ();
1989
9ce80e2de247 make sure that each new MacStation is correctly initialized
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1983
diff changeset
   233
  station->Reset ();
1893
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
  m_stations.push_back (std::make_pair (address, station));
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
  return station;
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
}
d72388b06b22 add MacStations to build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   238
WifiRemoteStation *
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   239
WifiRemoteStationManager::LookupNonUnicast (void)
1908
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   240
{
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   241
  return m_nonUnicast;
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   242
}
af48a02fe9a2 add MacStations::LookupNonUnicast
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1906
diff changeset
   243
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
   244
WifiMode 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   245
WifiRemoteStationManager::GetDefaultMode (void) const
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
   246
{
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
   247
  return m_defaultTxMode;
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
   248
}
2008
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   249
void
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   250
WifiRemoteStationManager::Reset (void)
2008
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   251
{
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   252
  for (Stations::const_iterator i = m_stations.begin (); i != m_stations.end (); i++)
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   253
    {
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   254
      delete i->second;
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   255
    }
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   256
  m_stations.clear ();
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   257
  m_basicModes.clear ();
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   258
  m_basicModes.push_back (m_defaultTxMode);
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   259
  NS_ASSERT (m_defaultTxMode.IsMandatory ());
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   260
}
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   261
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   262
WifiRemoteStationManager::AddBasicMode (WifiMode mode)
2008
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   263
{
2027
e09994eabd7b do not add a basic mode more than once.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2008
diff changeset
   264
  for (uint32_t i = 0; i < GetNBasicModes (); i++)
e09994eabd7b do not add a basic mode more than once.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2008
diff changeset
   265
    {
e09994eabd7b do not add a basic mode more than once.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2008
diff changeset
   266
      if (GetBasicMode (i) == mode)
e09994eabd7b do not add a basic mode more than once.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2008
diff changeset
   267
        {
e09994eabd7b do not add a basic mode more than once.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2008
diff changeset
   268
          return;
e09994eabd7b do not add a basic mode more than once.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2008
diff changeset
   269
        }
e09994eabd7b do not add a basic mode more than once.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2008
diff changeset
   270
    }
2008
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   271
  m_basicModes.push_back (mode);
93ccf1f2a38a implement Reset and AddBasicMode
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2003
diff changeset
   272
}
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
   273
uint32_t 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   274
WifiRemoteStationManager::GetNBasicModes (void) const
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
   275
{
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
   276
  return m_basicModes.size ();
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
   277
}
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
   278
WifiMode 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   279
WifiRemoteStationManager::GetBasicMode (uint32_t i) const
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
   280
{
1980
3fa3bac40b5b add asserts and some debug log
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1975
diff changeset
   281
  NS_ASSERT (i < m_basicModes.size ());
1983
a6306f2e88a7 index starts at zero
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1980
diff changeset
   282
  return m_basicModes[i];
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
   283
}
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   284
WifiRemoteStationManager::BasicModesIterator 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   285
WifiRemoteStationManager::BeginBasicModes (void) const
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
   286
{
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
   287
  return m_basicModes.begin ();
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
   288
}
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   289
WifiRemoteStationManager::BasicModesIterator 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   290
WifiRemoteStationManager::EndBasicModes (void) const
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
   291
{
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
   292
  return m_basicModes.end ();
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
   293
}
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   294
bool
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   295
WifiRemoteStationManager::IsLowLatency (void) const
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   296
{
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   297
  return m_isLowLatency;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   298
}
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
   299
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   300
} // namespace ns3
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   301
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   302
/***************************************************************
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   303
 *           Packet Mode Tagger
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   304
 ***************************************************************/ 
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   305
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   306
namespace ns3 {
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   307
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   308
class TxModeTag : public Tag
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   309
{
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   310
public:
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   311
  TxModeTag ();
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   312
  TxModeTag (WifiMode rtsMode, WifiMode dataMode);
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   313
  WifiMode GetRtsMode (void) const;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   314
  WifiMode GetDataMode (void) const;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   315
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   316
  static uint32_t GetUid (void);
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   317
  void Print (std::ostream &os) const;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   318
  void Serialize (ns3::Buffer::Iterator start) const;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   319
  uint32_t Deserialize (ns3::Buffer::Iterator start);
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   320
  uint32_t GetSerializedSize (void) const;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   321
private:
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   322
  WifiMode m_rtsMode;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   323
  WifiMode m_dataMode;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   324
};
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   325
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   326
TxModeTag::TxModeTag ()
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   327
{}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   328
TxModeTag::TxModeTag (WifiMode rtsMode, WifiMode dataMode)
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   329
  : m_rtsMode (rtsMode),
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   330
    m_dataMode (dataMode)
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   331
{}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   332
WifiMode 
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   333
TxModeTag::GetRtsMode (void) const
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   334
{
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   335
  return m_rtsMode;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   336
}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   337
WifiMode 
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   338
TxModeTag::GetDataMode (void) const
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   339
{
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   340
  return m_dataMode;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   341
}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   342
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   343
uint32_t 
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   344
TxModeTag::GetUid (void)
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   345
{
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   346
  static uint32_t uid = Tag::AllocateUid<TxModeTag> ("ns3.wifi.TxModeTag");
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   347
  return uid;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   348
}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   349
void 
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   350
TxModeTag::Print (std::ostream &os) const
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   351
{
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   352
  os << "rts="<<m_rtsMode<<" data="<<m_dataMode;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   353
}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   354
void 
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   355
TxModeTag::Serialize (ns3::Buffer::Iterator start) const
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   356
{}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   357
uint32_t 
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   358
TxModeTag::Deserialize (ns3::Buffer::Iterator start)
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   359
{
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   360
  return 0;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   361
}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   362
uint32_t 
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   363
TxModeTag::GetSerializedSize (void) const
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   364
{
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   365
  return 0;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   366
}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   367
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   368
} // namespace ns3
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   369
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   370
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   371
/***************************************************************
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   372
 *           WifiRemoteStation below.
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   373
 ***************************************************************/ 
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   374
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   375
namespace ns3 {
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   376
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   377
WifiRemoteStation::WifiRemoteStation ()
2003
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
   378
  : m_state (BRAND_NEW)
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   379
{}
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   380
WifiRemoteStation::~WifiRemoteStation ()
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   381
{}
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   382
2003
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
   383
bool
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   384
WifiRemoteStation::IsBrandNew (void) const
2003
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
   385
{
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
   386
  return m_state == BRAND_NEW;
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
   387
}
335dc094e52a support BRAND_NEW station in adhoc code. initialize the supported rates.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1989
diff changeset
   388
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   389
bool 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   390
WifiRemoteStation::IsAssociated (void) const
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   391
{
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   392
  return m_state == GOT_ASSOC_TX_OK;
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   393
}
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   394
bool 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   395
WifiRemoteStation::IsWaitAssocTxOk (void) const
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   396
{
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   397
  return m_state == WAIT_ASSOC_TX_OK;
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   398
}
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   399
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   400
WifiRemoteStation::RecordWaitAssocTxOk (void)
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   401
{
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   402
  m_state = WAIT_ASSOC_TX_OK;
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   403
}
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   404
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   405
WifiRemoteStation::RecordGotAssocTxOk (void)
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   406
{
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   407
  m_state = GOT_ASSOC_TX_OK;
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   408
}
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   409
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   410
WifiRemoteStation::RecordGotAssocTxFailed (void)
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   411
{
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   412
  m_state = DISASSOC;
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   413
}
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   414
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   415
WifiRemoteStation::RecordDisassociated (void)
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   416
{
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   417
  m_state = DISASSOC;
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   418
}
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   419
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   420
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   421
WifiRemoteStation::Reset (void)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   422
{
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
   423
  m_modes.clear ();
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   424
  AddSupportedMode (GetManager ()->GetDefaultMode ());
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   425
}
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   426
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   427
WifiRemoteStation::AddSupportedMode (WifiMode mode)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   428
{
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   429
  if (IsIn (mode))
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   430
    {
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   431
      return;
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   432
    }
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
   433
  m_modes.push_back (mode);
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   434
}
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   435
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   436
bool
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   437
WifiRemoteStation::IsIn (WifiMode mode) const
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   438
{
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
   439
  for (SupportedModes::const_iterator i = m_modes.begin (); i != m_modes.end (); i++)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   440
    {
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
   441
      if ((*i) == mode)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   442
        {
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   443
          return true;
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   444
        }
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   445
    }
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   446
  return false;
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   447
}
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   448
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   449
WifiMode
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   450
WifiRemoteStation::GetControlAnswerMode (WifiMode reqMode)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   451
{
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   452
  /**
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   453
   * see ieee 802.11e, section 9.6:
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   454
   * 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   455
   * To allow the transmitting STA to calculate the contents of 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   456
   * the Duration/ID field, a STA responding to a received frame 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   457
   * shall transmit its Control Response frame (either CTS or ACK) 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   458
   * frames, other than the Block-Ack control frame, at the highest 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   459
   * rate in the BSSBasicRateSet parameter that is less than or equal 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   460
   * to the rate of the immediately previous frame in the frame 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   461
   * exchange sequence (as defined in 9.79.12) and that is of the
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   462
   * same modulation type as the received frame. If no rate in the 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   463
   * basic rate set meets these conditions, then the control frame 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   464
   * sent in response to a received frame shall be transmitted at 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   465
   * the highest mandatory rate of the PHY that is less than or equal 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   466
   * to the rate of the received frame, and that is of the same 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   467
   * modulation type as the received frame. In addition, the Control 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   468
   * Response frame shall be sent using the same PHY options as the
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   469
   * received frame, unless they conflict with the requirement to use 
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   470
   * the BSSBasicRateSet parameter.
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   471
   */
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   472
  WifiMode mode = GetManager ()->GetDefaultMode ();
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   473
  bool found = false;
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   474
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   475
  // First, search the BSS Basic Rate set
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   476
  for (WifiRemoteStationManager::BasicModesIterator i = GetManager ()->BeginBasicModes (); 
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   477
       i != GetManager ()->EndBasicModes (); i++)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   478
    {
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
   479
      if (i->GetPhyRate () > mode.GetPhyRate () &&
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
   480
          i->GetPhyRate () <= reqMode.GetPhyRate () &&
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
   481
          i->GetModulationType () == reqMode.GetModulationType ())
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   482
        {
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
   483
          mode = *i;
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   484
          found = true;
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   485
        }
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   486
    }
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
   487
  // no need to search Mandatory rate set because it is included
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
   488
  // within the Basic rate set.
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   489
  return mode;
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   490
}
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   491
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   492
WifiMode 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   493
WifiRemoteStation::GetCtsMode (WifiMode rtsMode)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   494
{
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   495
  return GetControlAnswerMode (rtsMode);
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   496
}
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   497
WifiMode 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   498
WifiRemoteStation::GetAckMode (WifiMode dataMode)
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   499
{
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   500
  return GetControlAnswerMode (dataMode);
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   501
}
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   502
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   503
uint32_t 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   504
WifiRemoteStation::GetNSupportedModes (void) const
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   505
{
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
   506
  return m_modes.size ();
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   507
}
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   508
WifiMode 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   509
WifiRemoteStation::GetSupportedMode (uint32_t i) const
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   510
{
1989
9ce80e2de247 make sure that each new MacStation is correctly initialized
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1983
diff changeset
   511
  NS_ASSERT (i < m_modes.size ());
9ce80e2de247 make sure that each new MacStation is correctly initialized
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1983
diff changeset
   512
  return m_modes[i];
1913
4e4ea4809c3d implement broadcast/multicast MacStation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1912
diff changeset
   513
}
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   514
void 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   515
WifiRemoteStation::PrepareForQueue (Ptr<const Packet> packet, uint32_t fullPacketSize)
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   516
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   517
  if (GetManager ()->IsLowLatency ())
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   518
    {
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   519
      return;
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   520
    }
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   521
  TxModeTag tag = TxModeTag (DoGetRtsMode (), DoGetDataMode (fullPacketSize));
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   522
  packet->AddTag (tag);
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   523
}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   524
WifiMode 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   525
WifiRemoteStation::GetDataMode (Ptr<const Packet> packet, uint32_t fullPacketSize)
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   526
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   527
  if (GetManager ()->IsLowLatency ())
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   528
    {
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   529
      return DoGetDataMode (fullPacketSize);
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   530
    }
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   531
  TxModeTag tag;
2280
cb07eb75d520 fix optimized build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2269
diff changeset
   532
  bool found;
cb07eb75d520 fix optimized build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2269
diff changeset
   533
  found = packet->PeekTag (tag);
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   534
  NS_ASSERT (found);
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   535
  return tag.GetDataMode ();
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   536
}
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   537
WifiMode 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   538
WifiRemoteStation::GetRtsMode (Ptr<const Packet> packet)
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   539
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   540
  if (GetManager ()->IsLowLatency ())
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   541
    {
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   542
      return DoGetRtsMode ();
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   543
    }
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   544
  TxModeTag tag;
2280
cb07eb75d520 fix optimized build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2269
diff changeset
   545
  bool found;
cb07eb75d520 fix optimized build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2269
diff changeset
   546
  found = packet->PeekTag (tag);
2268
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   547
  NS_ASSERT (found);
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   548
  return tag.GetRtsMode ();
0e57ac711220 introduce a low latency parameter for rate control algorithms
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2027
diff changeset
   549
}
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   550
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   551
bool
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   552
WifiRemoteStation::NeedRts (Ptr<const Packet> packet)
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   553
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   554
  if (packet->GetSize () > GetManager ()->GetRtsCtsThreshold ()) 
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   555
    {
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   556
      return true;
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   557
    } 
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   558
  else 
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   559
    {
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   560
      return false;
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   561
    }
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   562
}
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   563
uint32_t 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   564
WifiRemoteStation::GetMaxSsrc (Ptr<const Packet> packet)
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   565
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   566
  return GetManager ()->GetMaxSsrc ();
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   567
}
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   568
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   569
uint32_t 
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   570
WifiRemoteStation::GetMaxSlrc (Ptr<const Packet> packet)
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   571
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   572
  return GetManager ()->GetMaxSlrc ();
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   573
}
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   574
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   575
bool
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   576
WifiRemoteStation::NeedFragmentation (Ptr<const Packet> packet)
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   577
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   578
  if (packet->GetSize () > GetManager ()->GetFragmentationThreshold ()) 
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   579
    {
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   580
      return true;
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   581
    } 
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   582
  else 
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   583
    {
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   584
      return false;
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   585
    }
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   586
}
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   587
uint32_t
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   588
WifiRemoteStation::GetNFragments (Ptr<const Packet> packet)
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   589
{
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   590
  uint32_t nFragments = packet->GetSize () / GetManager ()->GetFragmentationThreshold () + 1;
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   591
  return nFragments;
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   592
}
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   593
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   594
uint32_t
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   595
WifiRemoteStation::GetFragmentSize (Ptr<const Packet> packet, uint32_t fragmentNumber)
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   596
{
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   597
  uint32_t nFragment = GetNFragments (packet);
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   598
  if (fragmentNumber >= nFragment)
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   599
    {
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   600
      return 0;
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   601
    }
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   602
  if (fragmentNumber == nFragment - 1)
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   603
    {
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   604
      uint32_t lastFragmentSize = packet->GetSize () % GetManager ()->GetFragmentationThreshold ();
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   605
      return lastFragmentSize;
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   606
    }
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   607
  else
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   608
    {
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   609
      return GetManager ()->GetFragmentationThreshold ();
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   610
    }
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   611
}
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   612
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   613
bool
2524
db72c0e7743e port wifi model to Attributes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2508
diff changeset
   614
WifiRemoteStation::IsLastFragment (Ptr<const Packet> packet, uint32_t fragmentNumber) 
2349
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   615
{
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   616
  if (fragmentNumber == (GetNFragments (packet) - 1)) 
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   617
    {
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   618
      return true;
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   619
    } 
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   620
  else 
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   621
    {
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   622
      return false;
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   623
    }
b1df486516a4 allow rate control algorithms to control more per-packet parameters.
Federico Maguolo <maguolof@dei.unipd.it>
parents: 2280
diff changeset
   624
}
1911
e24ae66c6918 use WifiMode rather than mode indexes in MacStations API.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1908
diff changeset
   625
1906
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   626
} // namespace ns3
c0901f40bd7e move mac-station code in mac-stations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1893
diff changeset
   627