src/devices/mesh/mesh-wifi-interface-mac.cc
author Pavel Boyko <boyko@iitp.ru>
Wed, 18 Mar 2009 16:08:49 +0300
changeset 4843 f65f22ef327e
child 4844 3c38e23fa821
permissions -rw-r--r--
MeshWifiInterfaceMac just added and beacon generation refactored
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4843
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     2
/* 
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     3
 * Copyright (c) 2009 IITP RAS
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     4
 * 
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     8
 *
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    12
 * GNU General Public License for more details.
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    13
 *
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    17
 * 
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    18
 * Authors: Kirill Andreev <andreev@iitp.ru>
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    19
 *          Pavel Boyko <boyko@iitp.ru>
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    20
 */
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    21
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    22
#include "ns3/mesh-wifi-interface-mac.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    23
#include "ns3/mesh-wifi-beacon.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    24
#include "ns3/log.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    25
#include "ns3/wifi-phy.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    26
#include "ns3/dcf-manager.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    27
#include "ns3/mac-rx-middle.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    28
#include "ns3/mac-low.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    29
#include "ns3/dca-txop.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    30
#include "ns3/mesh-wifi-mac-header.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    31
#include "ns3/random-variable.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    32
#include "ns3/simulator.h"
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    33
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    34
NS_LOG_COMPONENT_DEFINE ("MeshWifiInterfaceMac");
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    35
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    36
namespace ns3 {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    37
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    38
NS_OBJECT_ENSURE_REGISTERED (MeshWifiInterfaceMac);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    39
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    40
TypeId
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    41
MeshWifiInterfaceMac::GetTypeId ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    42
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    43
  static TypeId tid = TypeId ("ns3::MeshWifiInterfaceMac")
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    44
                      .SetParent<WifiMac> ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    45
                      .AddConstructor<MeshWifiInterfaceMac> ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    46
                      .AddAttribute ("BeaconInterval", "Beacon Interval",
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    47
                                     TimeValue (Seconds (1.0)),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    48
                                     MakeTimeAccessor (&MeshWifiInterfaceMac::m_beaconInterval),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    49
                                     MakeTimeChecker ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    50
                                    )
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    51
                      .AddAttribute ("RandomStart", "Window when beacon generating starts (uniform random) in seconds",
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    52
                                     TimeValue (Seconds (0.1)),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    53
                                     MakeTimeAccessor (&MeshWifiInterfaceMac::m_randomStart),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    54
                                     MakeTimeChecker ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    55
                                    )
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    56
                      .AddAttribute ("SoftwareDelay", "Window of uniformely distributed random software handling delay",
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    57
                                     TimeValue (MicroSeconds (500)),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    58
                                     MakeTimeAccessor (&MeshWifiInterfaceMac::m_softwareDelay),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    59
                                     MakeTimeChecker ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    60
                                    )
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    61
                      .AddAttribute ("BeaconGeneration", "Enable/Disable Beaconing.",
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    62
                                     BooleanValue (true),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    63
                                     MakeBooleanAccessor (
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    64
                                       &MeshWifiInterfaceMac::SetBeaconGeneration,
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    65
                                       &MeshWifiInterfaceMac::GetBeaconGeneration
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    66
                                     ),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    67
                                     MakeBooleanChecker ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    68
                                    );
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    69
  return tid;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    70
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    71
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    72
MeshWifiInterfaceMac::MeshWifiInterfaceMac ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    73
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    74
  NS_LOG_FUNCTION (this);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    75
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    76
  m_rxMiddle = new MacRxMiddle ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    77
  m_rxMiddle->SetForwardCallback (MakeCallback (&MeshWifiInterfaceMac::Receive, this));
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    78
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    79
  m_low = CreateObject<MacLow> ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    80
  m_low->SetRxCallback (MakeCallback (&MacRxMiddle::Receive, m_rxMiddle));
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    81
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    82
  m_dcfManager = new DcfManager ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    83
  m_dcfManager->SetupLowListener (m_low);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    84
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    85
  m_beaconDca = CreateObject<DcaTxop> ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    86
  m_beaconDca->SetLow (m_low);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    87
  m_beaconDca->SetMinCw (0);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    88
  m_beaconDca->SetMaxCw (0);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    89
  m_beaconDca->SetAifsn(1);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    90
  m_beaconDca->SetManager (m_dcfManager);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    91
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    92
  m_VO = CreateObject<DcaTxop> ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    93
  m_VO->SetLow (m_low);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    94
  m_VO->SetMinCw (3);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    95
  m_VO->SetMaxCw (7);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    96
  m_VO->SetManager (m_dcfManager);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    97
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    98
  m_BE = CreateObject<DcaTxop> ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    99
  m_BE->SetLow (m_low);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   100
  m_BE->SetManager (m_dcfManager);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   101
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   102
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   103
MeshWifiInterfaceMac::~MeshWifiInterfaceMac ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   104
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   105
  NS_LOG_FUNCTION (this);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   106
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   107
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   108
//-----------------------------------------------------------------------------
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   109
// WifiMac inherited
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   110
//-----------------------------------------------------------------------------
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   111
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   112
MeshWifiInterfaceMac::SetSlot (Time slotTime)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   113
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   114
  NS_LOG_FUNCTION (this << slotTime);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   115
  m_dcfManager->SetSlot (slotTime);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   116
  m_slot = slotTime;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   117
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   118
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   119
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   120
MeshWifiInterfaceMac::SetSifs (Time sifs)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   121
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   122
  NS_LOG_FUNCTION (this << sifs);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   123
  m_dcfManager->SetSifs (sifs);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   124
  m_sifs = sifs;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   125
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   126
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   127
MeshWifiInterfaceMac::SetAckTimeout (Time ackTimeout)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   128
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   129
  m_low->SetAckTimeout (ackTimeout);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   130
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   131
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   132
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   133
MeshWifiInterfaceMac::SetCtsTimeout (Time ctsTimeout)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   134
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   135
  m_low->SetCtsTimeout (ctsTimeout);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   136
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   137
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   138
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   139
MeshWifiInterfaceMac::SetPifs (Time pifs)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   140
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   141
  NS_LOG_FUNCTION (this << pifs);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   142
  m_pifs = pifs;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   143
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   144
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   145
MeshWifiInterfaceMac::SetEifsNoDifs (Time eifsNoDifs)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   146
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   147
  NS_LOG_FUNCTION (this << eifsNoDifs);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   148
  m_dcfManager->SetEifsNoDifs (eifsNoDifs);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   149
  m_eifsNoDifs = eifsNoDifs;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   150
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   151
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   152
Time
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   153
MeshWifiInterfaceMac::GetSlot () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   154
  {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   155
    return m_slot;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   156
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   157
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   158
Time
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   159
MeshWifiInterfaceMac::GetSifs () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   160
  {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   161
    return m_sifs;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   162
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   163
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   164
Time
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   165
MeshWifiInterfaceMac::GetEifsNoDifs () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   166
  {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   167
    return m_eifsNoDifs;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   168
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   169
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   170
Time
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   171
MeshWifiInterfaceMac::GetAckTimeout () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   172
  {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   173
    return m_low->GetAckTimeout ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   174
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   175
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   176
Time
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   177
MeshWifiInterfaceMac::GetCtsTimeout () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   178
  {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   179
    return m_low->GetCtsTimeout ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   180
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   181
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   182
Time
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   183
MeshWifiInterfaceMac::GetPifs () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   184
  {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   185
    return m_low->GetPifs ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   186
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   187
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   188
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   189
MeshWifiInterfaceMac::SetWifiPhy (Ptr<WifiPhy> phy)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   190
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   191
  NS_LOG_FUNCTION (this << phy);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   192
  m_phy = phy;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   193
  m_dcfManager->SetupPhyListener (phy);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   194
  m_low->SetPhy (phy);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   195
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   196
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   197
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   198
MeshWifiInterfaceMac::SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> stationManager)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   199
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   200
  NS_LOG_FUNCTION (this << stationManager);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   201
  m_stationManager = stationManager;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   202
  m_BE->SetWifiRemoteStationManager (stationManager);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   203
  m_VO->SetWifiRemoteStationManager (stationManager);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   204
  m_beaconDca->SetWifiRemoteStationManager (stationManager);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   205
  m_low->SetWifiRemoteStationManager (stationManager);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   206
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   207
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   208
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   209
MeshWifiInterfaceMac::Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   210
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   211
  NS_LOG_FUNCTION (this << packet << to << from);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   212
  ForwardDown (packet, from, to);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   213
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   214
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   215
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   216
MeshWifiInterfaceMac::Enqueue (Ptr<const Packet> packet, Mac48Address to)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   217
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   218
  NS_LOG_FUNCTION (this << packet << to);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   219
  ForwardDown (packet, m_low->GetAddress (), to);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   220
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   221
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   222
bool
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   223
MeshWifiInterfaceMac::SupportsSendFrom () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   224
  {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   225
    return true;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   226
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   227
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   228
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   229
MeshWifiInterfaceMac::SetForwardUpCallback (Callback<void,Ptr<Packet>, Mac48Address, Mac48Address> upCallback)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   230
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   231
  NS_LOG_FUNCTION (this);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   232
  m_upCallback = upCallback;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   233
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   234
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   235
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   236
MeshWifiInterfaceMac::SetLinkUpCallback (Callback<void> linkUp)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   237
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   238
  NS_LOG_FUNCTION (this);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   239
  if (!linkUp.IsNull ())
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   240
    {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   241
      linkUp ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   242
    }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   243
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   244
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   245
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   246
MeshWifiInterfaceMac::SetLinkDownCallback (Callback<void> linkDown)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   247
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   248
  NS_LOG_FUNCTION (this);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   249
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   250
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   251
Mac48Address
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   252
MeshWifiInterfaceMac::GetAddress () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   253
  {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   254
    return m_address;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   255
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   256
Mac48Address
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   257
MeshWifiInterfaceMac::GetBssid () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   258
  {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   259
    return m_address;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   260
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   261
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   262
Ssid
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   263
MeshWifiInterfaceMac::GetSsid () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   264
  {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   265
    return m_MeshId;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   266
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   267
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   268
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   269
MeshWifiInterfaceMac::SetAddress (Mac48Address address)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   270
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   271
  NS_LOG_FUNCTION (address);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   272
  m_low->SetAddress(address);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   273
  m_address = address;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   274
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   275
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   276
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   277
MeshWifiInterfaceMac::SetSsid (Ssid ssid)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   278
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   279
  NS_LOG_FUNCTION (ssid);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   280
  m_MeshId = ssid;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   281
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   282
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   283
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   284
MeshWifiInterfaceMac::DoDispose ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   285
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   286
  NS_LOG_FUNCTION (this);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   287
  delete m_rxMiddle;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   288
  delete m_dcfManager;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   289
  //Delete smart pointers:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   290
  m_rxMiddle = 0;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   291
  m_low = 0;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   292
  m_dcfManager = 0;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   293
  m_phy = 0;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   294
  m_BE = 0;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   295
  m_VO = 0;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   296
  m_beaconSendEvent.Cancel ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   297
  m_beaconDca = 0;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   298
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   299
  WifiMac::DoDispose ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   300
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   301
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   302
//-----------------------------------------------------------------------------
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   303
// Forward frame up/down
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   304
//-----------------------------------------------------------------------------
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   305
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   306
MeshWifiInterfaceMac::ForwardUp (Ptr<Packet> packet, Mac48Address src, Mac48Address dst)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   307
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   308
  NS_LOG_FUNCTION (this << packet << src);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   309
  m_upCallback (packet, src, dst);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   310
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   311
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   312
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   313
MeshWifiInterfaceMac::ForwardDown (Ptr<const Packet> packet, Mac48Address from, Mac48Address to)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   314
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   315
  // 1. Create and add mesh header using routing information
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   316
  WifiMacHeader hdr;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   317
  Ptr<Packet> packet_to_send = packet->Copy();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   318
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   319
  /*
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   320
   TODO:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   321
  for all plugins {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   322
    plugin.UpdateOutcomingPacket....(packet, from, to);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   323
  }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   324
  */
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   325
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   326
  /*
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   327
  WifiMeshHeader meshHdr;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   328
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   329
  // TODO: Address 1 we receive from HWMP tag
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   330
  HwmpTag tag;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   331
  NS_ASSERT(packet->FindFirstMatchingTag(tag));
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   332
  meshHdr.SetMeshTtl(tag.GetTtl());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   333
  meshHdr.SetMeshSeqno(tag.GetSeqno());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   334
#if 0
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   335
  NS_LOG_DEBUG(
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   336
    "TX Packet sa = "<<from<<
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   337
    ", da = "<<to<<
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   338
    ", ra = "<<tag.GetAddress()<<
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   339
    ", I am "<<GetAddress()<<
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   340
    ", ttl = "<<(int)meshHdr.GetMeshTtl()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   341
  );
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   342
#endif
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   343
  if (to!= Mac48Address::GetBroadcast())
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   344
    NS_ASSERT(tag.GetAddress()!=Mac48Address::GetBroadcast());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   345
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   346
  hdr.SetTypeData ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   347
  hdr.SetAddr1 (tag.GetAddress());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   348
  hdr.SetAddr2 (GetAddress ());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   349
  hdr.SetAddr3 (to);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   350
  hdr.SetAddr4 (from);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   351
  hdr.SetDsFrom ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   352
  hdr.SetDsTo ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   353
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   354
  packet_to_send->AddHeader(meshHdr);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   355
  */
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   356
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   357
  // 2. Queue frame
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   358
  WifiRemoteStation *destination = m_stationManager->Lookup (to);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   359
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   360
  if (destination->IsBrandNew ())
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   361
    {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   362
      // in adhoc mode, we assume that every destination
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   363
      // supports all the rates we support.
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   364
      for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   365
        {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   366
          destination->AddSupportedMode (m_phy->GetMode (i));
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   367
        }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   368
      destination->RecordDisassociated ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   369
    }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   370
  m_BE->Queue (packet_to_send, hdr);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   371
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   372
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   373
SupportedRates
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   374
MeshWifiInterfaceMac::GetSupportedRates () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   375
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   376
  // set the set of supported rates and make sure that we indicate
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   377
  // the Basic Rate set in this set of supported rates.
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   378
  SupportedRates rates;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   379
  for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   380
    {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   381
      WifiMode mode = m_phy->GetMode (i);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   382
      rates.AddSupportedRate (mode.GetDataRate ());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   383
    }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   384
  // set the basic rates
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   385
  for (uint32_t j = 0; j < m_stationManager->GetNBasicModes (); j++)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   386
    {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   387
      WifiMode mode = m_stationManager->GetBasicMode (j);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   388
      rates.SetBasicRate (mode.GetDataRate ());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   389
    }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   390
  return rates;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   391
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   392
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   393
//-----------------------------------------------------------------------------
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   394
// Beacons
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   395
//-----------------------------------------------------------------------------
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   396
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   397
MeshWifiInterfaceMac::SetSoftwareDelay(Time delay)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   398
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   399
  NS_ASSERT(delay < m_beaconInterval);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   400
  m_softwareDelay = delay;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   401
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   402
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   403
Time
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   404
MeshWifiInterfaceMac::GetSoftwareDelay()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   405
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   406
  return m_softwareDelay;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   407
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   408
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   409
Time
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   410
MeshWifiInterfaceMac::CalcSwDelay()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   411
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   412
  UniformVariable coefficient(0.0, m_softwareDelay.GetSeconds());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   413
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   414
  // Be sure that frames don't change order due to different software delays
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   415
  Time delay = Seconds(coefficient.GetValue());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   416
  if (delay.GetSeconds() + Simulator::Now().GetSeconds() < m_lastMgtFrame.GetSeconds())
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   417
    delay = Seconds(m_lastMgtFrame.GetSeconds() - Simulator::Now().GetSeconds());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   418
  m_lastMgtFrame = Seconds(Simulator::Now().GetSeconds() + delay.GetSeconds());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   419
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   420
  NS_ASSERT(delay.GetSeconds() >= 0);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   421
  return delay;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   422
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   423
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   424
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   425
MeshWifiInterfaceMac::SetBeaconInterval (Time interval)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   426
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   427
  NS_LOG_FUNCTION (this << interval);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   428
  m_beaconInterval = interval;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   429
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   430
  NS_ASSERT(m_beaconInterval > m_softwareDelay);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   431
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   432
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   433
Time 
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   434
MeshWifiInterfaceMac::GetBeaconInterval() const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   435
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   436
  return m_beaconInterval;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   437
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   438
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   439
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   440
MeshWifiInterfaceMac::SetBeaconGeneration (bool enable)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   441
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   442
  NS_LOG_FUNCTION (this << enable);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   443
  if (enable)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   444
    {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   445
      // Now start sending beacons after some random delay (to avoid collisions)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   446
      UniformVariable coefficient(0.0, m_randomStart.GetSeconds());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   447
      Time randomStart = Seconds(coefficient.GetValue());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   448
      
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   449
      m_beaconSendEvent = Simulator::Schedule (randomStart, &MeshWifiInterfaceMac::SendBeacon, this);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   450
    }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   451
  else
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   452
    // stop sending beacons
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   453
    m_beaconSendEvent.Cancel ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   454
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   455
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   456
bool
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   457
MeshWifiInterfaceMac::GetBeaconGeneration () const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   458
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   459
  return m_beaconSendEvent.IsRunning ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   460
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   461
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   462
Time
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   463
MeshWifiInterfaceMac::GetTBTT() const
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   464
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   465
  return m_tbtt;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   466
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   467
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   468
void MeshWifiInterfaceMac::ShiftTBTT(Time shift)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   469
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   470
  // User of ShiftTBTT() must take care don't shift it to the past
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   471
  NS_ASSERT(GetTBTT() + shift > Simulator::Now());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   472
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   473
  m_tbtt += shift;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   474
  // Shift scheduled event
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   475
  Simulator::Cancel (m_beaconSendEvent);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   476
  m_beaconSendEvent = Simulator::Schedule (GetTBTT(), &MeshWifiInterfaceMac::SendBeacon, this);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   477
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   478
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   479
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   480
void 
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   481
MeshWifiInterfaceMac::ScheduleNextBeacon()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   482
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   483
  m_tbtt += GetBeaconInterval();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   484
  m_beaconSendEvent = Simulator::Schedule (GetTBTT(), &MeshWifiInterfaceMac::SendBeacon, this);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   485
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   486
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   487
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   488
MeshWifiInterfaceMac::SendBeacon ()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   489
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   490
  NS_LOG_FUNCTION (this);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   491
  NS_LOG_DEBUG(GetAddress() <<" is sending beacon");
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   492
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   493
  NS_ASSERT(! m_beaconSendEvent.IsRunning());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   494
  NS_ASSERT(Simulator::Now() == GetTBTT());     // assert that beacon is just on time
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   495
   
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   496
  // Form & send beacon
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   497
  MeshWifiBeacon beacon(GetSsid (), GetSupportedRates (), m_beaconInterval.GetMicroSeconds ());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   498
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   499
  /*
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   500
    TODO ask all plugins to add smth. to beacon
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   501
   for all plugins {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   502
     plugin.UpdateBeacon(beacon);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   503
   }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   504
  */
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   505
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   506
  m_beaconDca->Queue(beacon.CreatePacket(), beacon.CreateHeader(GetAddress()));
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   507
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   508
  ScheduleNextBeacon();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   509
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   510
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   511
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   512
void
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   513
MeshWifiInterfaceMac::Receive (Ptr<Packet> packet, WifiMacHeader const *hdr)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   514
{
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   515
  /* TODO
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   516
  if (hdr->IsBeacon ())
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   517
    {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   518
      MgtMeshBeaconHeader beacon;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   519
      Mac48Address from = hdr->GetAddr2();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   520
      packet->RemoveHeader (beacon);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   521
      NS_LOG_DEBUG("Beacon received from "<<hdr->GetAddr2()<<
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   522
                   " to "<<GetAddress()<<
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   523
                   " at "<<Simulator::Now ().GetMicroSeconds ()<<
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   524
                   " microseconds");
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   525
#if 0
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   526
      NeighboursTimingUnitsList neighbours;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   527
      neighbours = beacon.GetWifiBeaconTimingElement().GetNeighboursTimingElementsList();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   528
      for (NeighboursTimingUnitsList::const_iterator j = neighbours.begin(); j!= neighbours.end(); j++)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   529
        fprintf(
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   530
          stderr,
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   531
          "neigbours:\nAID=%u, last_beacon=%u ,beacon_interval=%u\n",
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   532
          (*j)->GetAID(),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   533
          (*j)->GetLastBeacon(),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   534
          (*j)->GetBeaconInterval()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   535
        );
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   536
#endif
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   537
      m_peerManager->SetReceivedBeaconTimers(
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   538
        GetAddress(),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   539
        from,
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   540
        Simulator::Now (),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   541
        MicroSeconds(beacon.GetBeaconIntervalUs()),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   542
        beacon.GetWifiBeaconTimingElement()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   543
      );
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   544
      if (!beacon.GetSsid().IsEqual(GetSsid()))
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   545
        return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   546
      SupportedRates rates = beacon.GetSupportedRates ();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   547
      WifiRemoteStation *peerSta = m_stationManager->Lookup (hdr->GetAddr2 ());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   548
      for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   549
        {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   550
          WifiMode mode = m_phy->GetMode (i);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   551
          if (rates.IsSupportedRate (mode.GetDataRate ()))
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   552
            {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   553
              peerSta->AddSupportedMode (mode);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   554
              if (rates.IsBasicRate (mode.GetDataRate ()))
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   555
                {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   556
                  m_stationManager->AddBasicMode (mode);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   557
                }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   558
            }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   559
        }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   560
      // TODO:Chack MeshConfigurationElement(now is nothing
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   561
      // to be checked)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   562
      m_peerManager->AskIfOpenNeeded(GetAddress(), from);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   563
      return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   564
    }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   565
  if (hdr->IsMultihopAction())
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   566
    {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   567
      WifiMeshHeader meshHdr;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   568
      //no mesh header parameters are needed here:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   569
      //TODO: check TTL
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   570
      packet->RemoveHeader(meshHdr);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   571
      WifiMeshMultihopActionHeader multihopHdr;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   572
      //parse multihop action header:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   573
      packet->RemoveHeader(multihopHdr);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   574
      WifiMeshMultihopActionHeader::ACTION_VALUE
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   575
      actionValue = multihopHdr.GetAction();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   576
      switch (multihopHdr.GetCategory())
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   577
        {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   578
        case WifiMeshMultihopActionHeader::MESH_PEER_LINK_MGT:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   579
        {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   580
          Mac48Address peerAddress;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   581
          MeshMgtPeerLinkManFrame peer_frame;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   582
          if (hdr->GetAddr1 () != GetAddress ())
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   583
            return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   584
          peerAddress = hdr->GetAddr2();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   585
          packet->RemoveHeader (peer_frame);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   586
          if (actionValue.peerLink != WifiMeshMultihopActionHeader::PEER_LINK_CLOSE)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   587
            {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   588
              //check Supported Rates
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   589
              SupportedRates rates = peer_frame.GetSupportedRates();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   590
              for (uint32_t i = 0; i < m_stationManager->GetNBasicModes (); i++)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   591
                {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   592
                  WifiMode mode = m_stationManager->GetBasicMode (i);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   593
                  if (!rates.IsSupportedRate (mode.GetDataRate ()))
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   594
                    {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   595
                      m_peerManager->ConfigurationMismatch(GetAddress(), peerAddress);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   596
                      return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   597
                    }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   598
                }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   599
              //Check SSID
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   600
              if (!peer_frame.GetMeshId().IsEqual(GetSsid()))
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   601
                {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   602
                  m_peerManager->ConfigurationMismatch(GetAddress(), peerAddress);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   603
                  return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   604
                }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   605
            }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   606
          switch (actionValue.peerLink)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   607
            {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   608
            case WifiMeshMultihopActionHeader::PEER_LINK_CONFIRM:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   609
              m_peerManager->SetConfirmReceived(
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   610
                GetAddress(),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   611
                peerAddress,
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   612
                peer_frame.GetAid(),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   613
                peer_frame.GetPeerLinkManagementElement(),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   614
                m_meshConfig
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   615
              );
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   616
              return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   617
            case WifiMeshMultihopActionHeader::PEER_LINK_OPEN:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   618
              m_peerManager->SetOpenReceived(
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   619
                GetAddress(),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   620
                peerAddress,
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   621
                peer_frame.GetPeerLinkManagementElement(),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   622
                m_meshConfig
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   623
              );
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   624
              return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   625
            case WifiMeshMultihopActionHeader::PEER_LINK_CLOSE:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   626
              m_peerManager->SetCloseReceived(
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   627
                GetAddress(),
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   628
                peerAddress,
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   629
                peer_frame.GetPeerLinkManagementElement()
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   630
              );
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   631
              return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   632
            default:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   633
              return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   634
            }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   635
          break;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   636
        }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   637
        case WifiMeshMultihopActionHeader::MESH_PATH_SELECTION:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   638
        {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   639
          if (!m_peerManager->IsActiveLink(GetAddress(), hdr->GetAddr2()))
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   640
            return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   641
          switch (actionValue.pathSelection)
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   642
            {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   643
            case WifiMeshMultihopActionHeader::PATH_REQUEST:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   644
            {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   645
              WifiPreqInformationElement preq;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   646
              packet->RemoveHeader(preq);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   647
              //TODO:recalculate
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   648
              //metric
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   649
              m_preqReceived(preq, hdr->GetAddr2(), CalculateMetric(hdr->GetAddr2()));
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   650
              return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   651
            }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   652
            case WifiMeshMultihopActionHeader::PATH_REPLY:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   653
            {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   654
              WifiPrepInformationElement prep;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   655
              packet->RemoveHeader(prep);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   656
              m_prepReceived(prep, hdr->GetAddr2(), CalculateMetric(hdr->GetAddr2()));
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   657
            }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   658
            return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   659
            case WifiMeshMultihopActionHeader::PATH_ERROR:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   660
            {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   661
              WifiPerrInformationElement perr;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   662
              packet->RemoveHeader(perr);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   663
              m_perrReceived(perr, hdr->GetAddr2());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   664
            }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   665
            return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   666
            case WifiMeshMultihopActionHeader::ROOT_ANNOUNCEMENT:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   667
              return;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   668
            }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   669
        }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   670
        default:
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   671
          break;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   672
        }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   673
    }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   674
  if (hdr->IsData())
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   675
    {
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   676
      NS_ASSERT((hdr->IsFromDs()) && (hdr->IsToDs()));
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   677
      NS_ASSERT(hdr->GetAddr4()!=Mac48Address::GetBroadcast());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   678
      //check seqno
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   679
      WifiMeshHeader meshHdr;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   680
      packet->RemoveHeader(meshHdr);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   681
      NS_LOG_DEBUG(
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   682
        "DATA TA="<< hdr->GetAddr2()<<
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   683
        ", da="<<hdr->GetAddr3()<<
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   684
        ", sa="<<hdr->GetAddr4()<<
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   685
        ", TTL="<<(int)meshHdr.GetMeshTtl());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   686
      HwmpTag tag;
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   687
      //mesh header is present within DATA and multihop action frames, so it must be done within MAC
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   688
      tag.SetSeqno(meshHdr.GetMeshSeqno());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   689
      tag.SetAddress(hdr->GetAddr2());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   690
      tag.SetTtl(meshHdr.GetMeshTtl());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   691
      //metric should be later
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   692
      packet->RemoveAllTags();
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   693
      packet->AddTag(tag);
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   694
      if (m_peerManager->IsActiveLink(GetAddress(), hdr->GetAddr2()))
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   695
        ForwardUp(packet, hdr->GetAddr4(), hdr->GetAddr3());
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   696
    }
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   697
    */
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   698
}
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   699
  
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   700
} // namespace ns3
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   701
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   702
f65f22ef327e MeshWifiInterfaceMac just added and beacon generation refactored
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   703