src/devices/mesh/802.11s/peer-manager-plugin.cc
author Kirill Andreev <andreev@iitp.ru>
Fri, 20 Mar 2009 13:46:50 +0300
changeset 4861 20d333d95df2
parent 4860 bb5194d57734
child 4865 e331ed5d3662
permissions -rw-r--r--
Neighbours are attached
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4856
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     2
/* 
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     3
 * Copyright (c) 2009 IITP RAS
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     4
 * 
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     8
 *
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    12
 * GNU General Public License for more details.
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    13
 *
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    17
 * 
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    18
 * Author: Kirill Andreev <andreev@iitp.ru>
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    19
 */
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    20
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    21
#include "ns3/mesh-wifi-interface-mac.h"
4860
bb5194d57734 New peer management protocol moved to 802.11s/
Pavel Boyko <boyko@iitp.ru>
parents: 4859
diff changeset
    22
#include "ie-dot11s-configuration.h"
bb5194d57734 New peer management protocol moved to 802.11s/
Pavel Boyko <boyko@iitp.ru>
parents: 4859
diff changeset
    23
#include "ie-dot11s-peer-management.h"
bb5194d57734 New peer management protocol moved to 802.11s/
Pavel Boyko <boyko@iitp.ru>
parents: 4859
diff changeset
    24
#include "peer-manager-plugin.h"
4861
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    25
#include "ns3/simulator.h"
4860
bb5194d57734 New peer management protocol moved to 802.11s/
Pavel Boyko <boyko@iitp.ru>
parents: 4859
diff changeset
    26
#include "ns3/log.h"
4856
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    27
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    28
NS_LOG_COMPONENT_DEFINE("PeerManager");
4856
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    29
namespace ns3 {
4861
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    30
Dot11sPeerManagerMacPlugin::Dot11sPeerManagerMacPlugin (uint32_t interface, Ptr<Dot11sPeerManagerProtocol> protocol)
4856
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    31
{
4861
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    32
  m_ifIndex = interface;
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    33
  m_protocol = protocol;
4856
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    34
}
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    35
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    36
Dot11sPeerManagerMacPlugin::~Dot11sPeerManagerMacPlugin ()
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    37
{
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    38
}
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    39
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    40
void
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    41
Dot11sPeerManagerMacPlugin::SetParent (Ptr<MeshWifiInterfaceMac> parent)
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    42
{
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    43
  NS_LOG_UNCOND("ADD PARENT");
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    44
  m_parent = parent;
4856
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    45
}
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    46
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    47
bool
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    48
Dot11sPeerManagerMacPlugin::Receive (Ptr<Packet> packet, const WifiMacHeader & header)
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    49
{
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    50
  NS_LOG_UNCOND("received a frame");
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    51
  if(header.IsBeacon())
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    52
  {
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    53
    NS_LOG_UNCOND("Beacon recevied by PM from"<<header.GetAddr2 ());
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
    54
    IeDot11sBeaconTiming beaconTiming;
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
    55
    Ptr<Packet> myBeacon = packet->Copy();
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
    56
    MgtBeaconHeader beacon_hdr;
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
    57
    myBeacon->RemoveHeader(beacon_hdr);
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
    58
    if(myBeacon->GetSize () == 0)
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
    59
      NS_LOG_UNCOND("Empty");
4861
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    60
    bool meshBeacon = false;
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
    61
    if(beaconTiming.FindMyInformationElement(myBeacon))
4861
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    62
      meshBeacon = true;
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    63
    m_protocol->ReceiveBeacon(
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    64
        m_ifIndex,
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    65
        meshBeacon,
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    66
        beaconTiming,
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    67
        header.GetAddr2(),
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    68
        Simulator::Now(),
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    69
        MicroSeconds(beacon_hdr.GetBeaconIntervalUs())
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    70
        );
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
    71
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    72
#if 0
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    73
      packet->RemoveHeader (beacon);
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    74
      m_peerManager->SetReceivedBeaconTimers (
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    75
        GetAddress (),
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    76
        from,
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    77
        Simulator::Now (),
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    78
        MicroSeconds (beacon.GetBeaconIntervalUs()),
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    79
        beacon.GetIeDot11sBeaconTiming ()
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    80
      );
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    81
#endif
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    82
  }
4856
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    83
  return false;
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    84
}
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    85
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    86
bool
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    87
Dot11sPeerManagerMacPlugin::UpdateOutcomingFrame (Ptr<Packet> packet, WifiMacHeader & header, Mac48Address from, Mac48Address to) const
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    88
{
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    89
  return false;
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    90
}
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    91
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    92
void
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    93
Dot11sPeerManagerMacPlugin::UpdateBeacon (MeshWifiBeacon & beacon) const
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    94
{
4861
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    95
#if 0
4857
ddfb13420455 Added new peer manager class, an old one we keep without change
Kirill Andreev <andreev@iitp.ru>
parents: 4856
diff changeset
    96
  NS_LOG_UNCOND("I am sending a beacon");
4861
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    97
  Ptr<IeDot11sPrep>  prep = Create<IeDot11sPrep> ();
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    98
#endif
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
    99
  Ptr<IeDot11sBeaconTiming>  beaconTiming = 
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
   100
    m_protocol->SendBeacon(
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
   101
        m_ifIndex,
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
   102
        Simulator::Now(),
20d333d95df2 Neighbours are attached
Kirill Andreev <andreev@iitp.ru>
parents: 4860
diff changeset
   103
        MicroSeconds(beacon.BeaconHeader().GetBeaconIntervalUs()));
4858
78437693dcc7 Peer manager restructure - unfinished
Kirill Andreev <andreev@iitp.ru>
parents: 4857
diff changeset
   104
  beacon.AddInformationElement(beaconTiming);
4856
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   105
}
b7241df728a3 Added PM-mac - not implemented
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   106
}//namespace ns3