src/mesh/model/dot11s/peer-management-protocol.cc
author John Abraham<john.abraham@gatech.edu>
Sat, 14 May 2011 04:50:07 -0400
changeset 7228 0202763b3998
parent 7178 1a07cbb68308
child 7256 b04ba6772f8c
permissions -rw-r--r--
Bug 1160 - optimized build ‘plugin’ set but not used, g++4.6.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     2
/*
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     3
 * Copyright (c) 2008,2009 IITP RAS
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     4
 *
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     8
 *
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    12
 * GNU General Public License for more details.
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    13
 *
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    17
 *
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    18
 * Authors: Kirill Andreev <andreev@iitp.ru>
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    19
 *          Aleksey Kovalenko <kovalenko@iitp.ru>
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    20
 */
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    21
5169
8033c4e41bd5 Installers moved to src/helper
Kirill Andreev <andreev@iitp.ru>
parents: 5168
diff changeset
    22
#include "ns3/peer-management-protocol.h"
8033c4e41bd5 Installers moved to src/helper
Kirill Andreev <andreev@iitp.ru>
parents: 5168
diff changeset
    23
#include "peer-management-protocol-mac.h"
4887
cbf02c77d5c1 HWMP is attached to mesh point device and MAC layer with zero functionality
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    24
#include "ie-dot11s-configuration.h"
5168
72bf9328f412 Failed destination is structure of HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5157
diff changeset
    25
#include "ie-dot11s-id.h"
4888
dec245c213ab Attach interfaces replaced with Install. Helper is simplifyed
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
    26
#include "ns3/mesh-point-device.h"
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    27
#include "ns3/simulator.h"
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    28
#include "ns3/assert.h"
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    29
#include "ns3/log.h"
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    30
#include "ns3/random-variable.h"
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
    31
#include "ns3/mesh-wifi-interface-mac.h"
4872
ea1bce018a44 Added namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4871
diff changeset
    32
#include "ns3/mesh-wifi-interface-mac-plugin.h"
4887
cbf02c77d5c1 HWMP is attached to mesh point device and MAC layer with zero functionality
Kirill Andreev <andreev@iitp.ru>
parents: 4882
diff changeset
    33
#include "ns3/wifi-net-device.h"
5825
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
    34
#include "ns3/trace-source-accessor.h"
4860
bb5194d57734 New peer management protocol moved to 802.11s/
Pavel Boyko <boyko@iitp.ru>
parents: 4858
diff changeset
    35
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
    36
NS_LOG_COMPONENT_DEFINE ("PeerManagementProtocol");
5132
aee541a30256 Restored newline at namespace
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
    37
namespace ns3 {
aee541a30256 Restored newline at namespace
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
    38
namespace dot11s {
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    39
/***************************************************
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    40
 * PeerManager
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    41
 ***************************************************/
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
    42
NS_OBJECT_ENSURE_REGISTERED (PeerManagementProtocol);
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    43
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    44
TypeId
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
    45
PeerManagementProtocol::GetTypeId (void)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    46
{
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
    47
  static TypeId tid = TypeId ("ns3::dot11s::PeerManagementProtocol")
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    48
    .SetParent<Object> ()
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    49
    .AddConstructor<PeerManagementProtocol> ()
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    50
    // maximum number of peer links. Now we calculate the total
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    51
    // number of peer links on all interfaces
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    52
    .AddAttribute ( "MaxNumberOfPeerLinks",
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    53
                    "Maximum number of peer links",
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    54
                    UintegerValue (32),
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    55
                    MakeUintegerAccessor (
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    56
                      &PeerManagementProtocol::m_maxNumberOfPeerLinks),
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    57
                    MakeUintegerChecker<uint8_t> ()
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    58
                    )
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    59
    .AddAttribute ( "MaxBeaconShiftValue",
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    60
                    "Maximum number of TUs for beacon shifting",
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    61
                    UintegerValue (15),
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    62
                    MakeUintegerAccessor (
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
    63
                      &PeerManagementProtocol::m_maxBeaconShift),
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    64
                    MakeUintegerChecker<uint16_t> ()
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    65
                    )
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    66
    .AddAttribute ( "EnableBeaconCollisionAvoidance",
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    67
                    "Enable/Disable Beacon collision avoidance.",
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    68
                    BooleanValue (true),
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    69
                    MakeBooleanAccessor (
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    70
                      &PeerManagementProtocol::SetBeaconCollisionAvoidance, &PeerManagementProtocol::GetBeaconCollisionAvoidance),
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
    71
                    MakeBooleanChecker ()
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    72
                    )
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    73
    .AddTraceSource ("LinkOpen",
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    74
                     "New peer link opened",
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    75
                     MakeTraceSourceAccessor (&PeerManagementProtocol::m_linkOpenTraceSrc)
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    76
                     )
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    77
    .AddTraceSource ("LinkClose",
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    78
                     "New peer link closed",
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    79
                     MakeTraceSourceAccessor (&PeerManagementProtocol::m_linkCloseTraceSrc)
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    80
                     )
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    81
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
    82
  ;
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    83
  return tid;
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    84
}
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    85
PeerManagementProtocol::PeerManagementProtocol () :
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
    86
  m_lastAssocId (0), m_lastLocalLinkId (1), m_enableBca (true), m_maxBeaconShift (15)
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    87
{
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    88
}
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
    89
PeerManagementProtocol::~PeerManagementProtocol ()
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    90
{
5417
899604299046 plug leaks (bug 711)
Craig Dowell <craigdo@ee.washington.edu>
parents: 5199
diff changeset
    91
  m_meshId = 0;
5005
8038200dac53 Fixed removing peer links
Kirill Andreev <andreev@iitp.ru>
parents: 5003
diff changeset
    92
}
8038200dac53 Fixed removing peer links
Kirill Andreev <andreev@iitp.ru>
parents: 5003
diff changeset
    93
void
8038200dac53 Fixed removing peer links
Kirill Andreev <andreev@iitp.ru>
parents: 5003
diff changeset
    94
PeerManagementProtocol::DoDispose ()
8038200dac53 Fixed removing peer links
Kirill Andreev <andreev@iitp.ru>
parents: 5003
diff changeset
    95
{
4877
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
    96
  //cancel cleanup event and go through the map of peer links,
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
    97
  //deleting each
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
    98
  for (PeerLinksMap::iterator j = m_peerLinks.begin (); j != m_peerLinks.end (); j++)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    99
    {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   100
      for (PeerLinksOnInterface::iterator i = j->second.begin (); i != j->second.end (); i++)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   101
        {
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   102
          (*i) = 0;
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   103
        }
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   104
      j->second.clear ();
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   105
    }
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4865
diff changeset
   106
  m_peerLinks.clear ();
5422
21a4f34518ff bug 711: example mesh/mesh fails valgrind.
Andrey Mazo <mazo@iitp.ru>
parents: 5417
diff changeset
   107
  m_plugins.clear ();
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   108
}
4870
79f9c2b6dffc Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents: 4869
diff changeset
   109
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   110
bool
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   111
PeerManagementProtocol::Install (Ptr<MeshPointDevice> mp)
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   112
{
4888
dec245c213ab Attach interfaces replaced with Install. Helper is simplifyed
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
   113
  std::vector<Ptr<NetDevice> > interfaces = mp->GetInterfaces ();
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   114
  for (std::vector<Ptr<NetDevice> >::iterator i = interfaces.begin (); i != interfaces.end (); i++)
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   115
    {
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   116
      Ptr<WifiNetDevice> wifiNetDev = (*i)->GetObject<WifiNetDevice> ();
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   117
      if (wifiNetDev == 0)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   118
        {
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   119
          return false;
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   120
        }
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   121
      Ptr<MeshWifiInterfaceMac> mac = wifiNetDev->GetMac ()->GetObject<MeshWifiInterfaceMac> ();
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   122
      if (mac == 0)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   123
        {
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   124
          return false;
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   125
        }
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   126
      Ptr<PeerManagementProtocolMac> plugin = Create<PeerManagementProtocolMac> ((*i)->GetIfIndex (), this);
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   127
      mac->InstallPlugin (plugin);
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   128
      m_plugins[(*i)->GetIfIndex ()] = plugin;
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   129
      PeerLinksOnInterface newmap;
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   130
      m_peerLinks[(*i)->GetIfIndex ()] = newmap;
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   131
    }
4898
b079cb67fda2 For now mesh point aggregates installed protocols. This is done to allow user directly access protocols via mp->GetObject<...>() (though you must known mesh point and protocol class to do this)
Pavel Boyko <boyko@iitp.ru>
parents: 4895
diff changeset
   132
  // Mesh point aggregates all installed protocols
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   133
  m_address = Mac48Address::ConvertFrom (mp->GetAddress ());
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   134
  mp->AggregateObject (this);
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   135
  return true;
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   136
}
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   137
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
   138
Ptr<IeBeaconTiming>
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   139
PeerManagementProtocol::GetBeaconTimingElement (uint32_t interface)
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   140
{
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   141
  if (!GetBeaconCollisionAvoidance ())
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   142
    {
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   143
      return 0;
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   144
    }
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   145
  Ptr<IeBeaconTiming> retval = Create<IeBeaconTiming> ();
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   146
  PeerLinksMap::iterator iface = m_peerLinks.find (interface);
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   147
  NS_ASSERT (iface != m_peerLinks.end ());
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   148
  for (PeerLinksOnInterface::iterator i = iface->second.begin (); i != iface->second.end (); i++)
4879
597d1e0a4bb5 BCA works again
Kirill Andreev <andreev@iitp.ru>
parents: 4877
diff changeset
   149
    {
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   150
      //If we do not know peer Assoc Id, we shall not add any info
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   151
      //to a beacon timing element
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   152
      if ((*i)->GetBeaconInterval () == Seconds (0))
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   153
        {
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   154
          //No beacon was received, do not include to the beacon timing element
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   155
          continue;
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   156
        }
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   157
      retval->AddNeighboursTimingElementUnit ((*i)->GetLocalAid (), (*i)->GetLastBeacon (),
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   158
                                              (*i)->GetBeaconInterval ());
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   159
    }
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   160
  return retval;
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   161
}
4867
3a02e4e89292 Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents: 4866
diff changeset
   162
void
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   163
PeerManagementProtocol::ReceiveBeacon (uint32_t interface, Mac48Address peerAddress, Time beaconInterval, Ptr<IeBeaconTiming> timingElement)
4867
3a02e4e89292 Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents: 4866
diff changeset
   164
{
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   165
  //PM STATE Machine
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   166
  //Check that a given beacon is not from our interface
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   167
  Simulator::Schedule (beaconInterval - TuToTime (m_maxBeaconShift + 1), &PeerManagementProtocol::DoShiftBeacon, this, interface);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   168
  for (PeerManagementProtocolMacMap::const_iterator i = m_plugins.begin (); i != m_plugins.end (); i++)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   169
    {
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   170
      if (i->second->GetAddress () == peerAddress)
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   171
        {
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   172
          return;
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   173
        }
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   174
    }
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   175
  Ptr<PeerLink> peerLink = FindPeerLink (interface, peerAddress);
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   176
  if (peerLink == 0)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   177
    {
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   178
      if (ShouldSendOpen (interface, peerAddress))
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   179
        {
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   180
          peerLink = InitiateLink (interface, peerAddress, Mac48Address::GetBroadcast ());
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   181
          peerLink->MLMEActivePeerLinkOpen ();
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   182
        }
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   183
    }
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   184
  peerLink->SetBeaconInformation (Simulator::Now (), beaconInterval);
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   185
  if (GetBeaconCollisionAvoidance ())
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   186
    {
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   187
      peerLink->SetBeaconTimingElement (*PeekPointer (timingElement));
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   188
    }
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   189
}
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   190
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   191
void
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   192
PeerManagementProtocol::ReceivePeerLinkFrame (uint32_t interface, Mac48Address peerAddress,
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   193
                                              Mac48Address peerMeshPointAddress, uint16_t aid, IePeerManagement peerManagementElement,
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   194
                                              IeConfiguration meshConfig)
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   195
{
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   196
  Ptr<PeerLink> peerLink = FindPeerLink (interface, peerAddress);
4867
3a02e4e89292 Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents: 4866
diff changeset
   197
  if (peerManagementElement.SubtypeIsOpen ())
3a02e4e89292 Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents: 4866
diff changeset
   198
    {
5199
15fe1a24cd5b Build fix for g++ 4.0.4 ('... may be used uninitialized in this function')
Pavel Boyko <boyko@iitp.ru>
parents: 5178
diff changeset
   199
      PmpReasonCode reasonCode (REASON11S_RESERVED);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   200
      bool reject = !(ShouldAcceptOpen (interface, peerAddress, reasonCode));
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   201
      if (peerLink == 0)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   202
        {
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   203
          peerLink = InitiateLink (interface, peerAddress, peerMeshPointAddress);
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   204
        }
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   205
      if (!reject)
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   206
        {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   207
          peerLink->OpenAccept (peerManagementElement.GetLocalLinkId (), meshConfig, peerMeshPointAddress);
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   208
        }
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   209
      else
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   210
        {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   211
          peerLink->OpenReject (peerManagementElement.GetLocalLinkId (), meshConfig, peerMeshPointAddress,
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   212
                                reasonCode);
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   213
        }
4867
3a02e4e89292 Finished processing peer link frames on new architeture
Kirill Andreev <andreev@iitp.ru>
parents: 4866
diff changeset
   214
    }
4877
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
   215
  if (peerLink == 0)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   216
    {
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   217
      return;
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   218
    }
4877
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
   219
  if (peerManagementElement.SubtypeIsConfirm ())
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   220
    {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   221
      peerLink->ConfirmAccept (peerManagementElement.GetLocalLinkId (),
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   222
                               peerManagementElement.GetPeerLinkId (), aid, meshConfig, peerMeshPointAddress);
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   223
    }
4877
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
   224
  if (peerManagementElement.SubtypeIsClose ())
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   225
    {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   226
      peerLink->Close (peerManagementElement.GetLocalLinkId (), peerManagementElement.GetPeerLinkId (),
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   227
                       peerManagementElement.GetReasonCode ());
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   228
    }
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   229
}
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   230
void
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   231
PeerManagementProtocol::ConfigurationMismatch (uint32_t interface, Mac48Address peerAddress)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   232
{
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   233
  Ptr<PeerLink> peerLink = FindPeerLink (interface, peerAddress);
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   234
  if (peerLink != 0)
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   235
    {
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   236
      peerLink->MLMECancelPeerLink (REASON11S_MESH_CAPABILITY_POLICY_VIOLATION);
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   237
    }
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   238
}
5154
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   239
void
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   240
PeerManagementProtocol::TransmissionFailure (uint32_t interface, Mac48Address peerAddress)
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   241
{
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   242
  NS_LOG_DEBUG("transmission failed between "<<GetAddress () << " and " << peerAddress << " failed, link will be colsed");
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   243
  Ptr<PeerLink> peerLink = FindPeerLink(interface, peerAddress);
5155
e4602e638487 Stupid fix
Kirill Andreev <andreev@iitp.ru>
parents: 5154
diff changeset
   244
  if (peerLink != 0)
5154
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   245
    {
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   246
      peerLink->TransmissionFailure ();
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   247
    }
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   248
}
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   249
void
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   250
PeerManagementProtocol::TransmissionSuccess (uint32_t interface, Mac48Address peerAddress)
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   251
{
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   252
  NS_LOG_DEBUG("transmission success "<<GetAddress () << " and " << peerAddress << " failed, link will be colsed");
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   253
  Ptr<PeerLink> peerLink = FindPeerLink(interface, peerAddress);
5155
e4602e638487 Stupid fix
Kirill Andreev <andreev@iitp.ru>
parents: 5154
diff changeset
   254
  if (peerLink != 0)
5154
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   255
    {
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   256
      peerLink->TransmissionSuccess ();
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   257
    }
bb06787ed7fe Added closing link due to transmission failure.
Kirill Andreev <andreev@iitp.ru>
parents: 5151
diff changeset
   258
}
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4865
diff changeset
   259
Ptr<PeerLink>
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   260
PeerManagementProtocol::InitiateLink (uint32_t interface, Mac48Address peerAddress,
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   261
                                      Mac48Address peerMeshPointAddress)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   262
{
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4865
diff changeset
   263
  Ptr<PeerLink> new_link = CreateObject<PeerLink> ();
4877
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
   264
  //find a peer link  - it must not exist
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   265
  if (FindPeerLink (interface, peerAddress) != 0)
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   266
    {
5075
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   267
      NS_FATAL_ERROR ("Peer link must not exist.");
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   268
    }
4881
cec7f8e2bbdf Minor cosmetics. Peer management protocol is assumed to be implemented now.
Pavel Boyko <boyko@iitp.ru>
parents: 4880
diff changeset
   269
  // Plugin must exist
5087
444caf312d1e Fixed names
Kirill Andreev <andreev@iitp.ru>
parents: 5086
diff changeset
   270
  PeerManagementProtocolMacMap::iterator plugin = m_plugins.find (interface);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   271
  NS_ASSERT (plugin != m_plugins.end ());
4868
35f396f9ff22 Bugfixes
Kirill Andreev <andreev@iitp.ru>
parents: 4867
diff changeset
   272
  PeerLinksMap::iterator iface = m_peerLinks.find (interface);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   273
  NS_ASSERT (iface != m_peerLinks.end ());
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   274
  new_link->SetLocalAid (m_lastAssocId++);
4869
bf6f699d4e03 Debug messages fixed
Kirill Andreev <andreev@iitp.ru>
parents: 4868
diff changeset
   275
  new_link->SetInterface (interface);
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4865
diff changeset
   276
  new_link->SetLocalLinkId (m_lastLocalLinkId++);
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4865
diff changeset
   277
  new_link->SetPeerAddress (peerAddress);
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4926
diff changeset
   278
  new_link->SetPeerMeshPointAddress (peerMeshPointAddress);
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4865
diff changeset
   279
  new_link->SetMacPlugin (plugin->second);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   280
  new_link->MLMESetSignalStatusCallback (MakeCallback (&PeerManagementProtocol::PeerLinkStatus, this));
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   281
  iface->second.push_back (new_link);
4866
564372fc5491 First management frame goes through new archotecture
Kirill Andreev <andreev@iitp.ru>
parents: 4865
diff changeset
   282
  return new_link;
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   283
}
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   284
4877
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
   285
Ptr<PeerLink>
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   286
PeerManagementProtocol::FindPeerLink (uint32_t interface, Mac48Address peerAddress)
4877
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
   287
{
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
   288
  PeerLinksMap::iterator iface = m_peerLinks.find (interface);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   289
  NS_ASSERT (iface != m_peerLinks.end ());
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   290
  for (PeerLinksOnInterface::iterator i = iface->second.begin (); i != iface->second.end (); i++)
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   291
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   292
      if ((*i)->GetPeerAddress () == peerAddress)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   293
        {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   294
          if ((*i)->LinkIsIdle ())
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   295
            {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   296
              (*i) = 0;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   297
              (iface->second).erase (i);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   298
              return 0;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   299
            }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   300
          else
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   301
            {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   302
              return (*i);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   303
            }
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   304
        }
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   305
    }
4877
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
   306
  return 0;
f08902c42733 Added a method to find peer link, code cleanup
Kirill Andreev <andreev@iitp.ru>
parents: 4876
diff changeset
   307
}
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   308
void
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   309
PeerManagementProtocol::SetPeerLinkStatusCallback (
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   310
  Callback<void, Mac48Address, Mac48Address, uint32_t, bool> cb)
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   311
{
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   312
  m_peerStatusCallback = cb;
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   313
}
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   314
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   315
std::vector<Mac48Address>
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   316
PeerManagementProtocol::GetPeers (uint32_t interface) const
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   317
{
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   318
  std::vector<Mac48Address> retval;
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   319
  PeerLinksMap::const_iterator iface = m_peerLinks.find (interface);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   320
  NS_ASSERT (iface != m_peerLinks.end ());
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   321
  for (PeerLinksOnInterface::const_iterator i = iface->second.begin (); i != iface->second.end (); i++)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   322
    {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   323
      if ((*i)->LinkIsEstab ())
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   324
        {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   325
          retval.push_back ((*i)->GetPeerAddress ());
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   326
        }
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   327
    }
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   328
  return retval;
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   329
}
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   330
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   331
std::vector< Ptr<PeerLink> >
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   332
PeerManagementProtocol::GetPeerLinks () const
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   333
{
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   334
  std::vector< Ptr<PeerLink> > links;
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   335
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   336
  for (PeerLinksMap::const_iterator iface = m_peerLinks.begin (); iface != m_peerLinks.end (); ++iface)
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   337
    {
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   338
      for (PeerLinksOnInterface::const_iterator i = iface->second.begin ();
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   339
           i != iface->second.end (); i++)
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   340
        if ((*i)->LinkIsEstab ())
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   341
          links.push_back (*i);
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   342
    }
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   343
  return links;
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   344
}
4870
79f9c2b6dffc Uncommented destructor and cleaner
Kirill Andreev <andreev@iitp.ru>
parents: 4869
diff changeset
   345
bool
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   346
PeerManagementProtocol::IsActiveLink (uint32_t interface, Mac48Address peerAddress)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   347
{
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   348
  Ptr<PeerLink> peerLink = FindPeerLink (interface, peerAddress);
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   349
  if (peerLink != 0)
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   350
    {
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   351
      return (peerLink->LinkIsEstab ());
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   352
    }
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   353
  return false;
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   354
}
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   355
bool
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4899
diff changeset
   356
PeerManagementProtocol::ShouldSendOpen (uint32_t interface, Mac48Address peerAddress)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   357
{
5098
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
   358
  return (m_stats.linksTotal <= m_maxNumberOfPeerLinks);
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   359
}
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   360
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   361
bool
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   362
PeerManagementProtocol::ShouldAcceptOpen (uint32_t interface, Mac48Address peerAddress,
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   363
                                          PmpReasonCode & reasonCode)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   364
{
5098
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
   365
  if (m_stats.linksTotal > m_maxNumberOfPeerLinks)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   366
    {
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   367
      reasonCode = REASON11S_MESH_MAX_PEERS;
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   368
      return false;
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   369
    }
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   370
  return true;
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   371
}
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   372
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   373
void
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   374
PeerManagementProtocol::DoShiftBeacon (uint32_t interface)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   375
{
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   376
  if (!GetBeaconCollisionAvoidance ())
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   377
    {
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   378
      return;
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   379
    }
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   380
  // If beacon interval is equal to the neighbor's one and one o more beacons received
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   381
  // by my neighbor coincide with my beacon - apply random uniformly distributed shift from
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   382
  // [-m_maxBeaconShift, m_maxBeaconShift] except 0.
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   383
  UniformVariable beaconShift (-m_maxBeaconShift, m_maxBeaconShift);
4879
597d1e0a4bb5 BCA works again
Kirill Andreev <andreev@iitp.ru>
parents: 4877
diff changeset
   384
  PeerLinksMap::iterator iface = m_peerLinks.find (interface);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   385
  NS_ASSERT (iface != m_peerLinks.end ());
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   386
  PeerManagementProtocolMacMap::const_iterator plugin = m_plugins.find (interface);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   387
  NS_ASSERT (plugin != m_plugins.end ());
7228
0202763b3998 Bug 1160 - optimized build ‘plugin’ set but not used, g++4.6.0
John Abraham<john.abraham@gatech.edu>
parents: 7178
diff changeset
   388
  // cast plugin to void, to suppress 'plugin' set but not used, compiler warning
0202763b3998 Bug 1160 - optimized build ‘plugin’ set but not used, g++4.6.0
John Abraham<john.abraham@gatech.edu>
parents: 7178
diff changeset
   389
  // in optimized builds
0202763b3998 Bug 1160 - optimized build ‘plugin’ set but not used, g++4.6.0
John Abraham<john.abraham@gatech.edu>
parents: 7178
diff changeset
   390
  (void) plugin;
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   391
  std::map<uint32_t, Time>::const_iterator lastBeacon = m_lastBeacon.find (interface);
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   392
  std::map<uint32_t, Time>::const_iterator beaconInterval = m_beaconInterval.find (interface);
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   393
  if ((lastBeacon == m_lastBeacon.end ()) || (beaconInterval == m_beaconInterval.end ()))
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   394
    {
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   395
      return;
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   396
    }
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   397
  if (TuToTime (m_maxBeaconShift) > m_beaconInterval[interface])
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   398
    {
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   399
      NS_FATAL_ERROR ("Wrong beacon shift parameters");
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   400
      return;
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   401
    }
4879
597d1e0a4bb5 BCA works again
Kirill Andreev <andreev@iitp.ru>
parents: 4877
diff changeset
   402
  for (PeerLinksOnInterface::iterator i = iface->second.begin (); i != iface->second.end (); i++)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   403
    {
4876
d78f1b978dac Rstructured file names: IeDot11s* no is Ie, because it is in namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4873
diff changeset
   404
      IeBeaconTiming::NeighboursTimingUnitsList neighbours;
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   405
      neighbours = (*i)->GetBeaconTimingElement ().GetNeighboursTimingElementsList ();
5075
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   406
      //Going through all my timing elements and detecting future beacon collisions
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   407
      for (IeBeaconTiming::NeighboursTimingUnitsList::const_iterator j = neighbours.begin (); j
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   408
           != neighbours.end (); j++)
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   409
        {
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   410
          if ((*i)->GetPeerAid () == (*j)->GetAid ())
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   411
            {
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   412
              // I am present at neighbour's list of neighbors
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   413
              continue;
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   414
            }
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   415
          //Beacon interval is stored in TU's
5450
dfcd6882cf19 Mesh: fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5446
diff changeset
   416
          if (((*j)->GetBeaconInterval ()) != TimeToTu (beaconInterval->second))
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   417
            {
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   418
              continue;
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   419
            }
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   420
          //Timing element keeps beacon receiving times in 256us units, TU=1024us
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   421
          if ((int)((int)(*j)->GetLastBeacon () / 4 - (int)TimeToTu (lastBeacon->second)) % TimeToTu (
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   422
                beaconInterval->second)
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   423
              != 0)
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   424
            {
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   425
              continue;
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   426
            }
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   427
          int shift = 0;
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   428
          do
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   429
            {
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   430
              shift = (int) beaconShift.GetValue ();
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   431
            }
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   432
          while (shift == 0);
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   433
          PeerManagementProtocolMacMap::iterator plugin = m_plugins.find (interface);
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   434
          NS_ASSERT (plugin != m_plugins.end ());
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   435
          plugin->second->SetBeaconShift (TuToTime (shift));
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   436
          return;
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   437
        }
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   438
    }
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   439
}
5075
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   440
Time
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   441
PeerManagementProtocol::TuToTime (uint32_t x)
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   442
{
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   443
  return MicroSeconds (x * 1024);
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   444
}
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   445
uint32_t
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   446
PeerManagementProtocol::TimeToTu (Time x)
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   447
{
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   448
  return (uint32_t)(x.GetMicroSeconds () / 1024);
5075
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   449
}
5825
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   450
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   451
void
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   452
PeerManagementProtocol::NotifyLinkOpen (Mac48Address peerMp, Mac48Address peerIface, Mac48Address myIface, uint32_t interface)
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   453
{
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   454
  NS_LOG_LOGIC ("link_open " << myIface << " " << peerIface);
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   455
  m_stats.linksOpened++;
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   456
  m_stats.linksTotal++;
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   457
  if (!m_peerStatusCallback.IsNull ())
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   458
    {
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   459
      m_peerStatusCallback (peerMp, peerIface, interface, true);
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   460
    }
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   461
  m_linkOpenTraceSrc (myIface, peerIface);
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   462
}
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   463
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   464
void
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   465
PeerManagementProtocol::NotifyLinkClose (Mac48Address peerMp, Mac48Address peerIface, Mac48Address myIface, uint32_t interface)
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   466
{
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   467
  NS_LOG_LOGIC ("link_close " << myIface << " " << peerIface);
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   468
  m_stats.linksClosed++;
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   469
  m_stats.linksTotal--;
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   470
  if (!m_peerStatusCallback.IsNull ())
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   471
    {
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   472
      m_peerStatusCallback (peerMp, peerIface, interface, false);
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   473
    }
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   474
  m_linkCloseTraceSrc (myIface, peerIface);
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   475
}
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   476
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   477
void
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   478
PeerManagementProtocol::PeerLinkStatus (uint32_t interface, Mac48Address peerAddress,
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   479
                                        Mac48Address peerMeshPointAddress, PeerLink::PeerState ostate, PeerLink::PeerState nstate)
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   480
{
5087
444caf312d1e Fixed names
Kirill Andreev <andreev@iitp.ru>
parents: 5086
diff changeset
   481
  PeerManagementProtocolMacMap::iterator plugin = m_plugins.find (interface);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   482
  NS_ASSERT (plugin != m_plugins.end ());
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   483
  NS_LOG_DEBUG ("Link between me:" << m_address << " my interface:" << plugin->second->GetAddress ()
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   484
                                   << " and peer mesh point:" << peerMeshPointAddress << " and its interface:" << peerAddress
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   485
                                   << ", at my interface ID:" << interface << ". State movement:" << ostate << " -> " << nstate);
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   486
  if ((nstate == PeerLink::ESTAB) && (ostate != PeerLink::ESTAB))
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   487
    {
5825
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   488
      NotifyLinkOpen (peerMeshPointAddress, peerAddress, plugin->second->GetAddress (), interface);
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   489
    }
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   490
  if ((ostate == PeerLink::ESTAB) && (nstate != PeerLink::ESTAB))
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   491
    {
5825
9e8c8a54772b Mesh: PeerManagementProtocol: added trace sources for peer link change
Kirill Andreev <andreev@iitp.ru>
parents: 5450
diff changeset
   492
      NotifyLinkClose (peerMeshPointAddress, peerAddress, plugin->second->GetAddress (), interface);
5085
5cfc1e9372af Fixed peer link status notification
Kirill Andreev <andreev@iitp.ru>
parents: 5077
diff changeset
   493
    }
5cfc1e9372af Fixed peer link status notification
Kirill Andreev <andreev@iitp.ru>
parents: 5077
diff changeset
   494
  if (nstate == PeerLink::IDLE)
5cfc1e9372af Fixed peer link status notification
Kirill Andreev <andreev@iitp.ru>
parents: 5077
diff changeset
   495
    {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   496
      Ptr<PeerLink> link = FindPeerLink (interface, peerAddress);
5075
322b3f86c2e9 Fixed MBCA
Kirill Andreev <andreev@iitp.ru>
parents: 5067
diff changeset
   497
      NS_ASSERT (link == 0);
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   498
    }
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   499
}
5017
a2a6accbc167 Restructured mesh configuration element
Kirill Andreev <andreev@iitp.ru>
parents: 5015
diff changeset
   500
uint8_t
a2a6accbc167 Restructured mesh configuration element
Kirill Andreev <andreev@iitp.ru>
parents: 5015
diff changeset
   501
PeerManagementProtocol::GetNumberOfLinks ()
a2a6accbc167 Restructured mesh configuration element
Kirill Andreev <andreev@iitp.ru>
parents: 5015
diff changeset
   502
{
5098
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
   503
  return m_stats.linksTotal;
5017
a2a6accbc167 Restructured mesh configuration element
Kirill Andreev <andreev@iitp.ru>
parents: 5015
diff changeset
   504
}
5020
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 5017
diff changeset
   505
Ptr<IeMeshId>
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 5017
diff changeset
   506
PeerManagementProtocol::GetMeshId () const
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 5017
diff changeset
   507
{
5024
Pavel Boyko <boyko@iitp.ru>
parents: 5023
diff changeset
   508
  NS_ASSERT (m_meshId != 0);
5020
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 5017
diff changeset
   509
  return m_meshId;
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 5017
diff changeset
   510
}
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 5017
diff changeset
   511
void
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   512
PeerManagementProtocol::SetMeshId (std::string s)
5020
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 5017
diff changeset
   513
{
5049
0573d83596f9 Mesh id cosmetic fixes
Kirill Andreev <andreev@iitp.ru>
parents: 5024
diff changeset
   514
  m_meshId = Create<IeMeshId> (s);
5020
79e8178d69eb Mesh ID is made separately from SSID
Kirill Andreev <andreev@iitp.ru>
parents: 5017
diff changeset
   515
}
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4926
diff changeset
   516
Mac48Address
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4926
diff changeset
   517
PeerManagementProtocol::GetAddress ()
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4926
diff changeset
   518
{
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4926
diff changeset
   519
  return m_address;
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4926
diff changeset
   520
}
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   521
void
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   522
PeerManagementProtocol::NotifyBeaconSent (uint32_t interface, Time beaconInterval)
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   523
{
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   524
  m_lastBeacon[interface] = Simulator::Now ();
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   525
  m_beaconInterval[interface] = beaconInterval;
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   526
}
5126
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5125
diff changeset
   527
PeerManagementProtocol::Statistics::Statistics (uint16_t t) :
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   528
  linksTotal (t), linksOpened (0), linksClosed (0)
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   529
{
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   530
}
5012
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5005
diff changeset
   531
void
5013
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
   532
PeerManagementProtocol::Statistics::Print (std::ostream & os) const
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
   533
{
5015
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5013
diff changeset
   534
  os << "<Statistics "
7178
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   535
  "linksTotal=\"" << linksTotal << "\" "
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   536
  "linksOpened=\"" << linksOpened << "\" "
1a07cbb68308 mesh coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6882
diff changeset
   537
  "linksClosed=\"" << linksClosed << "\"/>" << std::endl;
5013
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
   538
}
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
   539
void
5012
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5005
diff changeset
   540
PeerManagementProtocol::Report (std::ostream & os) const
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5005
diff changeset
   541
{
5157
ace422ad12df Cosmetics: '\n' was replaced with std::endl, Camel case for attributes
Kirill Andreev <andreev@iitp.ru>
parents: 5156
diff changeset
   542
  os << "<PeerManagementProtocol>" << std::endl;
5013
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
   543
  m_stats.Print (os);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   544
  for (PeerManagementProtocolMacMap::const_iterator plugins = m_plugins.begin (); plugins != m_plugins.end (); plugins++)
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   545
    {
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   546
      //Take statistics from plugin:
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   547
      plugins->second->Report (os);
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   548
      //Print all active peer links:
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   549
      PeerLinksMap::const_iterator iface = m_peerLinks.find (plugins->second->m_ifIndex);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   550
      NS_ASSERT (iface != m_peerLinks.end ());
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   551
      for (PeerLinksOnInterface::const_iterator i = iface->second.begin (); i != iface->second.end (); i++)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   552
        {
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   553
          (*i)->Report (os);
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   554
        }
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5049
diff changeset
   555
    }
5157
ace422ad12df Cosmetics: '\n' was replaced with std::endl, Camel case for attributes
Kirill Andreev <andreev@iitp.ru>
parents: 5156
diff changeset
   556
  os << "</PeerManagementProtocol>" << std::endl;
5012
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5005
diff changeset
   557
}
5013
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
   558
void
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
   559
PeerManagementProtocol::ResetStats ()
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
   560
{
6157
e3f238a05acb Fix build with g++-4.5.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 5825
diff changeset
   561
  m_stats = Statistics (m_stats.linksTotal); // don't reset number of links
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   562
  for (PeerManagementProtocolMacMap::const_iterator plugins = m_plugins.begin (); plugins != m_plugins.end (); plugins++)
5125
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   563
    {
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   564
      plugins->second->ResetStats ();
b90c6c0af6a3 Added max beacon loss to PeerManagementProtocol (for beacon timing), cosmetic
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   565
    }
5013
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
   566
}
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
   567
5446
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   568
void
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   569
PeerManagementProtocol::SetBeaconCollisionAvoidance (bool enable)
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   570
{
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   571
  m_enableBca = enable;
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   572
}
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   573
bool
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   574
PeerManagementProtocol::GetBeaconCollisionAvoidance () const
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   575
{
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   576
  return m_enableBca;
85d025cc5da4 Mesh: fixed HWMP sequence and metric filtering, added route discovery time
Kirill Andreev <andreev@iitp.ru>
parents: 5422
diff changeset
   577
}
4872
ea1bce018a44 Added namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4871
diff changeset
   578
} // namespace dot11s
ea1bce018a44 Added namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4871
diff changeset
   579
} //namespace ns3
ea1bce018a44 Added namespace dot11s
Kirill Andreev <andreev@iitp.ru>
parents: 4871
diff changeset
   580