src/devices/mesh/flame/flame-protocol.cc
author Kirill Andreev <andreev@iitp.ru>
Wed, 17 Jun 2009 20:37:32 +0400
changeset 5082 528da3d1e5a4
parent 5080 f97dc799fea0
child 5083 5b154b30a8a1
permissions -rw-r--r--
Flame stack initialized
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5079
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     2
/*
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     3
 * Copyright (c) 2009 IITP RAS
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     4
 *
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     8
 *
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    12
 * GNU General Public License for more details.
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    13
 *
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    17
 *
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    18
 * Author: Kirill Andreev <andreev@iitp.ru>
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    19
 */
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    20
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    21
#include "flame-protocol.h"
5082
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    22
#include "flame-rtable.h"
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    23
#include "flame-header.h"
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    24
#include "ns3/log.h"
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    25
#include "ns3/simulator.h"
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    26
#include "ns3/packet.h"
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    27
#include "ns3/mesh-point-device.h"
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    28
#include "ns3/wifi-net-device.h"
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    29
#include "ns3/mesh-point-device.h"
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    30
#include "ns3/mesh-wifi-interface-mac.h"
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    31
#include "ns3/random-variable.h"
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    32
5079
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    33
namespace ns3 {
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
    34
namespace flame {
5080
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    35
//-----------------------------------------------------------------------------
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    36
// FlameTag
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    37
//-----------------------------------------------------------------------------
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    38
NS_OBJECT_ENSURE_REGISTERED (FlameTag);
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    39
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    40
TypeId
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    41
FlameTag::GetTypeId ()
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    42
{
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    43
  static TypeId tid = TypeId ("ns3::flame::FlameTag")
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    44
     .SetParent<Tag> ()
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    45
     .AddConstructor<FlameTag> ();
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    46
   return tid;
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    47
}
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    48
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    49
TypeId
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    50
FlameTag::GetInstanceTypeId () const
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    51
{
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    52
  return GetTypeId ();
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    53
}
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    54
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    55
uint32_t
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    56
FlameTag::GetSerializedSize () const
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    57
{
5082
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    58
  return 6;
5080
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    59
}
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    60
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    61
void
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    62
FlameTag::Serialize (TagBuffer i) const
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    63
{
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    64
  uint8_t buf[6];
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    65
  address.CopyTo (buf);
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    66
  for (int j = 0; j < 6; j ++)
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    67
    i.WriteU8 (buf[j]);
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    68
}
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    69
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    70
void
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    71
FlameTag::Deserialize (TagBuffer i)
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    72
{
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    73
  uint8_t buf[6];
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    74
  for (int j = 0; j < 6; j ++)
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    75
    buf[j] = i.ReadU8 ();
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    76
  address.CopyFrom (buf);
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    77
}
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    78
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    79
void
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    80
FlameTag::Print (std::ostream &os) const
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    81
{
5082
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    82
  os << "address = " << address;
5080
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    83
}
f97dc799fea0 Added flame tag
Kirill Andreev <andreev@iitp.ru>
parents: 5079
diff changeset
    84
5082
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    85
//-----------------------------------------------------------------------------
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    86
// FlameTag
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    87
//-----------------------------------------------------------------------------
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    88
TypeId
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    89
FlameProtocol::GetTypeId ()
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    90
{
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    91
  static TypeId tid = TypeId ("ns3::flame::FlameProtocol")
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    92
    .SetParent<MeshL2RoutingProtocol> ()
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    93
    .AddConstructor<FlameProtocol> ()
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    94
    .AddAttribute ("BroadcastInterval", "How often we must send broadcast packets",
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    95
        TimeValue (Seconds (5)),
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    96
        MakeTimeAccessor (&FlameProtocol::m_broadcastInterval),
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    97
        MakeTimeChecker ()
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    98
        );
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
    99
  return tid;
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   100
}
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   101
FlameProtocol::FlameProtocol () :
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   102
  m_broadcastInterval (Seconds (5)),
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   103
  m_lastBroadcast (Simulator::Now ()),
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   104
  m_myLastSeqno (0)
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   105
{
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   106
}
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   107
FlameProtocol::~FlameProtocol ()
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   108
{
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   109
}
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   110
void
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   111
FlameProtocol::DoDispose ()
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   112
{
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   113
}
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   114
bool
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   115
FlameProtocol::RequestRoute (uint32_t  sourceIface, const Mac48Address source, const Mac48Address destination,
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   116
      Ptr<const Packet> const_packet, uint16_t  protocolType, RouteReplyCallback  routeReply)
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   117
{
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   118
  Ptr<Packet> packet = const_packet->Copy ();
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   119
  NS_LOG_UNCOND("Forwarding packet from "<<source <<", to "<<destination<<"protocol = "<<protocolType);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   120
  if (source == m_address)
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   121
  {
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   122
    //Packet from upper layer!
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   123
    if(destination == Mac48Address::GetBroadcast ())
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   124
    {
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   125
      //Broadcast always is forwarded as broadcast!
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   126
      FlameHeader flameHdr;
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   127
      FlameTag tag (Mac48Address::GetBroadcast ());
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   128
      flameHdr.AddCost (0);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   129
      flameHdr.SetSeqno (m_myLastSeqno ++);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   130
      flameHdr.SetProtocol (protocolType);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   131
      flameHdr.SetOrigDst (destination);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   132
      flameHdr.SetOrigSrc (source);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   133
      packet->AddHeader (flameHdr);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   134
      packet->AddPacketTag (tag);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   135
      routeReply (true, packet, source, destination, FLAME_PORT, FlameRtable::INTERFACE_ANY);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   136
    }
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   137
    else
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   138
      NS_FATAL_ERROR ("not done yet!");
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   139
  }
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   140
  else
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   141
  {
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   142
    NS_FATAL_ERROR ("not done yet!");
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   143
  }
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   144
  return true;
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   145
}
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   146
bool
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   147
FlameProtocol::Install (Ptr<MeshPointDevice> mp)
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   148
{
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   149
  m_mp = mp;
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   150
  std::vector<Ptr<NetDevice> > interfaces = mp->GetInterfaces ();
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   151
  for (std::vector<Ptr<NetDevice> >::const_iterator i = interfaces.begin (); i != interfaces.end(); i++)
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   152
    {
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   153
      // Checking for compatible net device
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   154
      Ptr<WifiNetDevice> wifiNetDev = (*i)->GetObject<WifiNetDevice> ();
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   155
      if (wifiNetDev == 0)
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   156
        return false;
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   157
      Ptr<MeshWifiInterfaceMac>  mac = wifiNetDev->GetMac ()->GetObject<MeshWifiInterfaceMac> ();
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   158
      if (mac == 0)
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   159
        return false;
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   160
      // Installing plugins:
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   161
      Ptr<FlameMacPlugin> flameMac = Create<FlameMacPlugin> (wifiNetDev->GetIfIndex (), this);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   162
      m_interfaces[wifiNetDev->GetIfIndex ()] = flameMac;
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   163
      mac->InstallPlugin (flameMac);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   164
    }
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   165
  mp->SetRoutingProtocol (this);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   166
  // Mesh point aggregates all installed protocols
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   167
  mp->AggregateObject (this);
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   168
  m_address = Mac48Address::ConvertFrom (mp->GetAddress ());//* address;
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   169
  return true;
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   170
}
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   171
Mac48Address
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   172
FlameProtocol::GetAddress ()
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   173
{
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   174
  return m_address;
528da3d1e5a4 Flame stack initialized
Kirill Andreev <andreev@iitp.ru>
parents: 5080
diff changeset
   175
}
5079
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   176
} //namespace flame
245215e5e6ed Added flame rtable, fixed DoDispose in HwmpRtable
Kirill Andreev <andreev@iitp.ru>
parents:
diff changeset
   177
} //namespace ns3