src/devices/mesh/dot11s/hwmp-protocol.cc
author Kirill Andreev <andreev@iitp.ru>
Mon, 03 Aug 2009 19:13:46 +0400
changeset 5145 7f50ab7ce59d
parent 5134 26472734b69f
child 5147 546c5d9a7e64
permissions -rw-r--r--
Added path update to FLAME
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
     2
/*
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
     3
 * Copyright (c) 2008,2009 IITP RAS
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
     4
 *
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
     8
 *
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    12
 * GNU General Public License for more details.
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    13
 *
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    17
 *
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    18
 * Authors: Kirill Andreev <andreev@iitp.ru>
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    19
 */
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    20
4886
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
    21
#include "hwmp-protocol.h"
5086
fccfd0073ea3 Fixed names: now protocols are called *-protocol.[h,cc], plugin is called
Kirill Andreev <andreev@iitp.ru>
parents: 5083
diff changeset
    22
#include "hwmp-protocol-mac.h"
4889
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
    23
#include "hwmp-tag.h"
4891
b8db474bce60 Added HWMP tag to mercurial :)
Kirill Andreev <andreev@iitp.ru>
parents: 4889
diff changeset
    24
#include "hwmp-rtable.h"
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    25
#include "ns3/log.h"
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    26
#include "ns3/simulator.h"
4887
cbf02c77d5c1 HWMP is attached to mesh point device and MAC layer with zero functionality
Kirill Andreev <andreev@iitp.ru>
parents: 4886
diff changeset
    27
#include "ns3/packet.h"
4817
1257e4b82e17 L2RoutingProtocol refactored to MeshL2RoutingProtocol
Pavel Boyko <boyko@iitp.ru>
parents: 4813
diff changeset
    28
#include "ns3/mesh-point-device.h"
4887
cbf02c77d5c1 HWMP is attached to mesh point device and MAC layer with zero functionality
Kirill Andreev <andreev@iitp.ru>
parents: 4886
diff changeset
    29
#include "ns3/wifi-net-device.h"
4888
dec245c213ab Attach interfaces replaced with Install. Helper is simplifyed
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
    30
#include "ns3/mesh-point-device.h"
4887
cbf02c77d5c1 HWMP is attached to mesh point device and MAC layer with zero functionality
Kirill Andreev <andreev@iitp.ru>
parents: 4886
diff changeset
    31
#include "ns3/mesh-wifi-interface-mac.h"
4964
9107f67330f3 More than one root works
Kirill Andreev <andreev@iitp.ru>
parents: 4963
diff changeset
    32
#include "ns3/random-variable.h"
5054
49851228eec9 Added interface helper
Kirill Andreev <andreev@iitp.ru>
parents: 5046
diff changeset
    33
#include "airtime-metric.h"
4895
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
    34
#include "ie-dot11s-preq.h"
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
    35
#include "ie-dot11s-prep.h"
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    36
4886
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
    37
NS_LOG_COMPONENT_DEFINE ("HwmpProtocol");
4817
1257e4b82e17 L2RoutingProtocol refactored to MeshL2RoutingProtocol
Pavel Boyko <boyko@iitp.ru>
parents: 4813
diff changeset
    38
5132
aee541a30256 Restored newline at namespace
Kirill Andreev <andreev@iitp.ru>
parents: 5130
diff changeset
    39
namespace ns3 {
aee541a30256 Restored newline at namespace
Kirill Andreev <andreev@iitp.ru>
parents: 5130
diff changeset
    40
namespace dot11s {
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
    41
4886
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
    42
NS_OBJECT_ENSURE_REGISTERED (HwmpProtocol);
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
    43
TypeId
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
    44
HwmpProtocol::GetTypeId ()
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
    45
{
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: 4896
diff changeset
    46
  static TypeId tid = TypeId ("ns3::dot11s::HwmpProtocol")
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
    47
    .SetParent<MeshL2RoutingProtocol> ()
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
    48
    .AddConstructor<HwmpProtocol> ()
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    49
    .AddAttribute ( "RandomStart",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    50
                    "Random delay at first proactive PREQ",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    51
                    TimeValue (Seconds (0.1)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    52
                    MakeTimeAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    53
                        &HwmpProtocol::m_randomStart),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    54
                    MakeTimeChecker ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    55
                   )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    56
    .AddAttribute ( "maxQueueSize",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    57
                    "Maximum number of packets we can store when resolving route",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    58
                    UintegerValue (255),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    59
                    MakeUintegerAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    60
                        &HwmpProtocol::m_maxQueueSize),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    61
                    MakeUintegerChecker<uint16_t> (1)
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    62
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    63
    .AddAttribute ( "dot11MeshHWMPmaxPREQretries",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    64
                    "Maximum number of retries before we suppose the destination to be unreachable",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    65
                    UintegerValue (3),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    66
                    MakeUintegerAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    67
                        &HwmpProtocol::m_dot11MeshHWMPmaxPREQretries),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    68
                    MakeUintegerChecker<uint8_t> (1)
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    69
                   )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    70
    .AddAttribute ( "dot11MeshHWMPnetDiameterTraversalTime",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    71
                    "Time we suppose the packet to go from one edge of the network to another",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    72
                    TimeValue (MicroSeconds (1024*100)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    73
                    MakeTimeAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    74
                        &HwmpProtocol::m_dot11MeshHWMPnetDiameterTraversalTime),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    75
                    MakeTimeChecker ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    76
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    77
    .AddAttribute ( "dot11MeshHWMPpreqMinInterval",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    78
                    "Minimal interval between to successive PREQs",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    79
                    TimeValue (MicroSeconds (1024*100)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    80
                    MakeTimeAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    81
                        &HwmpProtocol::m_dot11MeshHWMPpreqMinInterval),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    82
                    MakeTimeChecker ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    83
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    84
    .AddAttribute ( "dot11MeshHWMPperrMinInterval",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    85
                    "Minimal interval between to successive PREQs",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    86
                    TimeValue (MicroSeconds (1024*100)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    87
                    MakeTimeAccessor (&HwmpProtocol::m_dot11MeshHWMPperrMinInterval),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    88
                    MakeTimeChecker ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    89
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    90
    .AddAttribute ( "dot11MeshHWMPactiveRootTimeout",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    91
                    "Lifetime of poractive routing information",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    92
                    TimeValue (MicroSeconds (1024*5000)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    93
                    MakeTimeAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    94
                        &HwmpProtocol::m_dot11MeshHWMPactiveRootTimeout),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    95
                    MakeTimeChecker ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    96
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    97
    .AddAttribute ( "dot11MeshHWMPactivePathTimeout",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    98
                     "Lifetime of reactive routing information",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
    99
                      TimeValue (MicroSeconds (1024*5000)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   100
                      MakeTimeAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   101
                          &HwmpProtocol::m_dot11MeshHWMPactivePathTimeout),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   102
                      MakeTimeChecker ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   103
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   104
    .AddAttribute ( "dot11MeshHWMPpathToRootInterval",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   105
                    "Interval between two successive proactive PREQs",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   106
                    TimeValue (MicroSeconds (1024*2000)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   107
                    MakeTimeAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   108
                        &HwmpProtocol::m_dot11MeshHWMPpathToRootInterval),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   109
                    MakeTimeChecker ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   110
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   111
    .AddAttribute ( "dot11MeshHWMPrannInterval",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   112
                    "Lifetime of poractive routing information",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   113
                    TimeValue (MicroSeconds (1024*5000)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   114
                    MakeTimeAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   115
                        &HwmpProtocol::m_dot11MeshHWMPrannInterval),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   116
                    MakeTimeChecker ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   117
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   118
    .AddAttribute ( "maxTtl",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   119
                    "Initial value of Time To Live field",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   120
                    UintegerValue (32),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   121
                    MakeUintegerAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   122
                        &HwmpProtocol::m_maxTtl),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   123
                    MakeUintegerChecker<uint8_t> (2)
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   124
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   125
    .AddAttribute ( "unicastPerrThreshold",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   126
                    "Maximum number of PERR receivers, when we send a PERR as a chain of unicasts",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   127
                    UintegerValue (32),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   128
                    MakeUintegerAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   129
                        &HwmpProtocol::m_unicastPerrThreshold),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   130
                    MakeUintegerChecker<uint8_t> (1)
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   131
                    )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   132
    .AddAttribute ( "unicastPreqThreshold",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   133
                    "Maximum number of PREQ receivers, when we send a PREQ as a chain of unicasts",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   134
                    UintegerValue (1),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   135
                    MakeUintegerAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   136
                        &HwmpProtocol::m_unicastPreqThreshold),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   137
                    MakeUintegerChecker<uint8_t> (1)
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   138
                    )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   139
    .AddAttribute ( "unicastDataThreshold",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   140
                    "Maximum number ofbroadcast receivers, when we send a broadcast as a chain of unicasts",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   141
                    UintegerValue (1),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   142
                    MakeUintegerAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   143
                        &HwmpProtocol::m_unicastDataThreshold),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   144
                    MakeUintegerChecker<uint8_t> (1)
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   145
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   146
    .AddAttribute ( "doFlag",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   147
                    "Destination only HWMP flag",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   148
                    BooleanValue (false),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   149
                    MakeBooleanAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   150
                        &HwmpProtocol::m_doFlag),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   151
                    MakeBooleanChecker ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   152
                  )
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   153
    .AddAttribute ( "rfFlag",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   154
                    "Reply and forward flag",
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   155
                    BooleanValue (true),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   156
                    MakeBooleanAccessor (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   157
                        &HwmpProtocol::m_rfFlag),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   158
                    MakeBooleanChecker ()
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   159
        );
4886
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
   160
  return tid;
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
   161
}
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   162
4889
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   163
HwmpProtocol::HwmpProtocol ():
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   164
  m_dataSeqno (1),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   165
  m_hwmpSeqno (1),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   166
  m_preqId (0),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   167
  m_rtable (CreateObject<HwmpRtable> ()),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   168
  m_randomStart(Seconds (0.1)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   169
  m_maxQueueSize (255),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   170
  m_dot11MeshHWMPmaxPREQretries (3),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   171
  m_dot11MeshHWMPnetDiameterTraversalTime (MicroSeconds (1024*100)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   172
  m_dot11MeshHWMPpreqMinInterval (MicroSeconds (1024*100)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   173
  m_dot11MeshHWMPperrMinInterval (MicroSeconds (1024*100)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   174
  m_dot11MeshHWMPactiveRootTimeout (MicroSeconds (1024*5000)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   175
  m_dot11MeshHWMPactivePathTimeout (MicroSeconds (1024*5000)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   176
  m_dot11MeshHWMPpathToRootInterval (MicroSeconds (1024*2000)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   177
  m_dot11MeshHWMPrannInterval (MicroSeconds (1024*5000)),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   178
  m_isRoot (false),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   179
  m_maxTtl (32),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   180
  m_unicastPerrThreshold (32),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   181
  m_unicastPreqThreshold (1),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   182
  m_unicastDataThreshold (1),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   183
  m_doFlag (false),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   184
  m_rfFlag (false)
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   185
{
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   186
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   187
  if (m_isRoot)
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   188
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   189
      SetRoot ();
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   190
    }
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   191
}
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   192
4886
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
   193
HwmpProtocol::~HwmpProtocol ()
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   194
{
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   195
}
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   196
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   197
void
4886
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
   198
HwmpProtocol::DoDispose ()
4852
123dc54d734e Coding style changes: indentation (some fixes), spaces in operators, function
Andrey Mazo <mazo@iitp.ru>
parents: 4837
diff changeset
   199
{
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   200
  for (std::map<Mac48Address, EventId>::iterator i = m_preqTimeouts.begin (); i != m_preqTimeouts.end (); i ++)
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   201
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   202
      i->second.Cancel ();
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   203
    }
5145
7f50ab7ce59d Added path update to FLAME
Kirill Andreev <andreev@iitp.ru>
parents: 5134
diff changeset
   204
  m_proactivePreqTimer.Cancel();
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   205
  m_preqTimeouts.clear ();
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   206
  m_lastDataSeqno.clear ();
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   207
  m_lastHwmpSeqno.clear ();
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   208
  m_rqueue.clear ();
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   209
  m_rtable = 0;
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   210
}
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   211
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   212
bool
4886
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
   213
HwmpProtocol::RequestRoute (
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   214
  uint32_t sourceIface,
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   215
  const Mac48Address source,
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   216
  const Mac48Address destination,
5070
c70964936d2e added 'const' label to packet in MeshPointDevice::Forward and
Kirill Andreev <andreev@iitp.ru>
parents: 5066
diff changeset
   217
  Ptr<const Packet> constPacket,
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   218
  uint16_t protocolType, //ethrnet 'Protocol' field
4817
1257e4b82e17 L2RoutingProtocol refactored to MeshL2RoutingProtocol
Pavel Boyko <boyko@iitp.ru>
parents: 4813
diff changeset
   219
  MeshL2RoutingProtocol::RouteReplyCallback routeReply
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   220
)
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   221
{
5070
c70964936d2e added 'const' label to packet in MeshPointDevice::Forward and
Kirill Andreev <andreev@iitp.ru>
parents: 5066
diff changeset
   222
  Ptr <Packet> packet = constPacket->Copy ();
4889
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   223
  HwmpTag tag;
4852
123dc54d734e Coding style changes: indentation (some fixes), spaces in operators, function
Andrey Mazo <mazo@iitp.ru>
parents: 4837
diff changeset
   224
  if (sourceIface == GetMeshPoint ()->GetIfIndex())
4953
0226369989a3 Added {} in 'if' where ASSERT exists
Kirill Andreev <andreev@iitp.ru>
parents: 4950
diff changeset
   225
    {
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   226
      // packet from level 3
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   227
      if (packet->PeekPacketTag (tag))
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   228
        {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   229
          NS_FATAL_ERROR ("HWMP tag has come with a packet from upper layer. This must not occur...");
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   230
        }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   231
      //Filling TAG:
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   232
      if (destination == Mac48Address::GetBroadcast ())
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   233
        {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   234
          tag.SetSeqno (m_dataSeqno++);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   235
        }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   236
      tag.SetTtl (m_maxTtl);
4953
0226369989a3 Added {} in 'if' where ASSERT exists
Kirill Andreev <andreev@iitp.ru>
parents: 4950
diff changeset
   237
    }
4918
00c83f6ae8b7 Ported to new tags
Kirill Andreev <andreev@iitp.ru>
parents: 4906
diff changeset
   238
  else
4948
f47497fde31a Fixed bug with uninitialized TAG
Kirill Andreev <andreev@iitp.ru>
parents: 4947
diff changeset
   239
    {
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   240
      if (!packet->RemovePacketTag (tag))
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   241
        {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   242
          NS_FATAL_ERROR ("HWMP tag is supposed to be here at this point.");
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   243
        }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   244
      tag.DecrementTtl ();
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   245
      if (tag.GetTtl () == 0)
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   246
        {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   247
          m_stats.droppedTtl ++;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   248
          return false;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   249
        }
4948
f47497fde31a Fixed bug with uninitialized TAG
Kirill Andreev <andreev@iitp.ru>
parents: 4947
diff changeset
   250
    }
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   251
  if (destination == Mac48Address::GetBroadcast ())
5039
65524e2ec376 Added dropped TTL field to stats
Kirill Andreev <andreev@iitp.ru>
parents: 5038
diff changeset
   252
    {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   253
      m_stats.txBroadcast ++;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   254
      m_stats.txBytes += packet->GetSize ();
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   255
      //channel IDs where we have already sent broadcast:
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   256
      std::vector<uint16_t> channels;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   257
      for (HwmpProtocolMacMap::const_iterator plugin = m_interfaces.begin (); plugin != m_interfaces.end (); plugin ++)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   258
        {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   259
          bool should_send = true;
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   260
          for (std::vector<uint16_t>::const_iterator chan = channels.begin (); chan != channels.end (); chan ++)
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   261
            {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   262
              if ((*chan) == plugin->second->GetChannelId ())
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   263
                {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   264
                  should_send = false;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   265
                }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   266
            }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   267
          if (!should_send)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   268
            {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   269
              continue;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   270
            }
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   271
          channels.push_back (plugin->second->GetChannelId ());
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   272
          std::vector<Mac48Address> receivers = GetBroadcastReceivers (plugin->first);
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   273
          for (std::vector<Mac48Address>::const_iterator i = receivers.begin (); i != receivers.end (); i ++)
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   274
            {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   275
              Ptr<Packet> packet_copy = packet->Copy();
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   276
              tag.SetAddress (*i);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   277
              packet_copy->AddPacketTag (tag);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   278
              routeReply (true, packet_copy, source, destination, protocolType, plugin->first);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   279
            }
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   280
        }
4944
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   281
    }
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   282
  else
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   283
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   284
      return ForwardUnicast (sourceIface, source, destination, packet, protocolType, routeReply, tag.GetTtl ());
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   285
    }
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   286
  return true;
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   287
}
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   288
bool
5083
5b154b30a8a1 Restructured L2RoutingProtocol: added cleanup function, which deletes all tags
Kirill Andreev <andreev@iitp.ru>
parents: 5070
diff changeset
   289
HwmpProtocol::RemoveRoutingStuff (uint32_t fromIface, const Mac48Address source,
5b154b30a8a1 Restructured L2RoutingProtocol: added cleanup function, which deletes all tags
Kirill Andreev <andreev@iitp.ru>
parents: 5070
diff changeset
   290
      const Mac48Address destination, Ptr<Packet>  packet, uint16_t&  protocolType)
5b154b30a8a1 Restructured L2RoutingProtocol: added cleanup function, which deletes all tags
Kirill Andreev <andreev@iitp.ru>
parents: 5070
diff changeset
   291
{
5b154b30a8a1 Restructured L2RoutingProtocol: added cleanup function, which deletes all tags
Kirill Andreev <andreev@iitp.ru>
parents: 5070
diff changeset
   292
  HwmpTag tag;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   293
  if (!packet->RemovePacketTag (tag))
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   294
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   295
      NS_FATAL_ERROR ("HWMP tag must exist when packet received from the network");
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   296
    }
5083
5b154b30a8a1 Restructured L2RoutingProtocol: added cleanup function, which deletes all tags
Kirill Andreev <andreev@iitp.ru>
parents: 5070
diff changeset
   297
  return true;
5b154b30a8a1 Restructured L2RoutingProtocol: added cleanup function, which deletes all tags
Kirill Andreev <andreev@iitp.ru>
parents: 5070
diff changeset
   298
}
5b154b30a8a1 Restructured L2RoutingProtocol: added cleanup function, which deletes all tags
Kirill Andreev <andreev@iitp.ru>
parents: 5070
diff changeset
   299
bool
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   300
HwmpProtocol::ForwardUnicast (uint32_t  sourceIface, const Mac48Address source, const Mac48Address destination,
4948
f47497fde31a Fixed bug with uninitialized TAG
Kirill Andreev <andreev@iitp.ru>
parents: 4947
diff changeset
   301
    Ptr<Packet>  packet, uint16_t  protocolType, RouteReplyCallback  routeReply, uint32_t ttl)
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   302
{
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   303
  NS_ASSERT(destination != Mac48Address::GetBroadcast ());
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   304
  HwmpRtable::LookupResult result = m_rtable->LookupReactive (destination);
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   305
  NS_LOG_DEBUG("Requested src = "<<source<<", dst = "<<destination<<", I am "<<GetAddress ()<<", RA = "<<result.retransmitter);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   306
  if (result.retransmitter == Mac48Address::GetBroadcast ())
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   307
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   308
      result = m_rtable->LookupProactive ();
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   309
    }
4962
00ee1735c339 Bugfixes. Changed traversal time, because 4x4 network does not work
Kirill Andreev <andreev@iitp.ru>
parents: 4961
diff changeset
   310
  HwmpTag tag;
00ee1735c339 Bugfixes. Changed traversal time, because 4x4 network does not work
Kirill Andreev <andreev@iitp.ru>
parents: 4961
diff changeset
   311
  tag.SetAddress (result.retransmitter);
00ee1735c339 Bugfixes. Changed traversal time, because 4x4 network does not work
Kirill Andreev <andreev@iitp.ru>
parents: 4961
diff changeset
   312
  tag.SetTtl (ttl);
5057
95a72c98f08d Added dot11s installator, fixed bug with adding tag in proactive mode of HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5054
diff changeset
   313
  //seqno and metric is not used;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   314
  packet->AddPacketTag (tag);
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   315
  if (result.retransmitter != Mac48Address::GetBroadcast ())
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   316
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   317
      //reply immediately:
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   318
      routeReply (true, packet, source, destination, protocolType, result.ifIndex);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   319
      m_stats.txUnicast ++;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   320
      m_stats.txBytes += packet->GetSize ();
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   321
      return true;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   322
    }
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   323
  if (sourceIface != GetMeshPoint ()->GetIfIndex ())
5129
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
      //Start path error procedure:
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   326
      NS_LOG_DEBUG ("Must Send PERR");
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   327
      result = m_rtable->LookupReactiveExpired (destination);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   328
      //1.  Lookup expired reactive path. If exists - start path error
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   329
      //    procedure towards a next hop of this path
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   330
      //2.  If there was no reactive path, we lookup expired proactive
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   331
      //    path. If exist - start path error procedure towards path to
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   332
      //    root
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   333
      if (result.retransmitter == Mac48Address::GetBroadcast ())
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   334
        {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   335
          result = m_rtable->LookupProactiveExpired ();
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   336
        }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   337
      if (result.retransmitter != Mac48Address::GetBroadcast ())
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   338
        {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   339
          std::vector<IePerr::FailedDestination> destinations = m_rtable->GetUnreachableDestinations (result.retransmitter);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   340
          InitiatePathError (MakePathError (destinations));
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   341
        }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   342
      m_stats.totalDropped ++;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   343
      return false;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   344
    }
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   345
  //Request a destination:
4955
b83a62acbcf2 Added proper flags to HWMP PREQ, routing information is updated in accordance
Kirill Andreev <andreev@iitp.ru>
parents: 4953
diff changeset
   346
  result = m_rtable->LookupReactiveExpired (destination);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   347
  if (ShouldSendPreq (destination))
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   348
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   349
      uint32_t originator_seqno = GetNextHwmpSeqno ();
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   350
      uint32_t dst_seqno = 0;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   351
      if (result.retransmitter != Mac48Address::GetBroadcast ())
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   352
        {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   353
          dst_seqno = result.seqnum;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   354
        }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   355
      m_stats.initiatedPreq ++;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   356
      for (HwmpProtocolMacMap::const_iterator i = m_interfaces.begin (); i != m_interfaces.end (); i ++)
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   357
        {
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   358
          i->second->RequestDestination (destination, originator_seqno, dst_seqno);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   359
        }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   360
    }
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   361
  QueuedPacket pkt;
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   362
  pkt.pkt = packet;
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   363
  pkt.dst = destination;
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   364
  pkt.src = source;
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   365
  pkt.protocol = protocolType;
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   366
  pkt.reply = routeReply;
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   367
  pkt.inInterface = sourceIface;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   368
  if (QueuePacket (pkt))
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   369
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   370
      m_stats.totalQueued ++;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   371
      return true;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   372
    }
5010
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
   373
  else
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   374
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   375
      m_stats.totalDropped ++;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   376
      return false;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   377
    }
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   378
}
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   379
void
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   380
HwmpProtocol::ReceivePreq (IePreq preq, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric)
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   381
{
4946
f97e16db1d79 Added airtime link metric. packet error rate is not done yet
Kirill Andreev <andreev@iitp.ru>
parents: 4945
diff changeset
   382
  preq.IncrementMetric (metric);
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   383
  //acceptance cretirea:
4945
e64c6bfd8536 Bugfixes
Kirill Andreev <andreev@iitp.ru>
parents: 4944
diff changeset
   384
  std::map<Mac48Address, uint32_t>::const_iterator i = m_lastHwmpSeqno.find (preq.GetOriginatorAddress());
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   385
  if (i == m_lastHwmpSeqno.end ())
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   386
    {
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   387
      m_lastHwmpSeqno[preq.GetOriginatorAddress ()] = preq.GetOriginatorSeqNumber ();
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   388
      m_lastHwmpMetric[preq.GetOriginatorAddress ()] = preq.GetMetric ();
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   389
    }
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   390
  else
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   391
    {
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   392
      if (i->second > preq.GetOriginatorSeqNumber ())
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   393
        {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   394
          return;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   395
        }
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   396
      if (i->second == preq.GetOriginatorSeqNumber ())
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   397
        {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   398
          //find metric
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   399
          std::map<Mac48Address, uint32_t>::const_iterator j = m_lastHwmpMetric.find (preq.GetOriginatorAddress());
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   400
          NS_ASSERT (j != m_lastHwmpSeqno.end ());
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   401
          if (j->second <= preq.GetMetric ())
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   402
            {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   403
              return;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   404
            }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   405
        }
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   406
      m_lastHwmpSeqno[preq.GetOriginatorAddress ()] = preq.GetOriginatorSeqNumber ();
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   407
      m_lastHwmpMetric[preq.GetOriginatorAddress ()] = preq.GetMetric ();
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   408
    }
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   409
  NS_LOG_DEBUG("I am " << GetAddress () << "Accepted preq from address" << from << ", preq:" << preq);
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   410
  std::vector<Ptr<DestinationAddressUnit> > destinations = preq.GetDestinationList ();
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   411
  //Add reactive path to originator:
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   412
  if (
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   413
      ((m_rtable->LookupReactive (preq.GetOriginatorAddress ())).retransmitter == Mac48Address::GetBroadcast ()) ||
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   414
      ((m_rtable->LookupReactive (preq.GetOriginatorAddress ())).metric > preq.GetMetric ())
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   415
      )
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   416
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   417
      m_rtable->AddReactivePath (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   418
          preq.GetOriginatorAddress (),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   419
          from,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   420
          interface,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   421
          preq.GetMetric (),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   422
          MicroSeconds (preq.GetLifetime () * 1024),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   423
          preq.GetOriginatorSeqNumber ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   424
          );
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   425
      ReactivePathResolved (preq.GetOriginatorAddress ());
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   426
    }
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   427
  //Add reactive path for precursor:
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   428
  if (
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   429
      ((m_rtable->LookupReactive (fromMp)).retransmitter == Mac48Address::GetBroadcast ()) ||
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   430
      ((m_rtable->LookupReactive (fromMp)).metric > preq.GetMetric ())
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   431
      )
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   432
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   433
      m_rtable->AddReactivePath (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   434
          fromMp,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   435
          from,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   436
          interface,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   437
          metric,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   438
          MicroSeconds (preq.GetLifetime () * 1024),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   439
          preq.GetOriginatorSeqNumber ()
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   440
          );
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   441
      ReactivePathResolved (fromMp);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   442
    }
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   443
  for (std::vector<Ptr<DestinationAddressUnit> >::const_iterator i = destinations.begin (); i != destinations.end (); i++)
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   444
    {
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   445
      if ((*i)->GetDestinationAddress () == Mac48Address::GetBroadcast())
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   446
        {
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   447
          //only proactive PREQ contains destination
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   448
          //address as broadcast! Proactive preq MUST
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   449
          //have destination count equal to 1 and
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   450
          //per destination flags DO and RF
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   451
          NS_ASSERT (preq.GetDestCount() == 1);
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   452
          NS_ASSERT (((*i)->IsDo ()) && ((*i)->IsRf ()));
4964
9107f67330f3 More than one root works
Kirill Andreev <andreev@iitp.ru>
parents: 4963
diff changeset
   453
          //Add proactive path only if it is the better then existed
9107f67330f3 More than one root works
Kirill Andreev <andreev@iitp.ru>
parents: 4963
diff changeset
   454
          //before
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   455
          if (
4964
9107f67330f3 More than one root works
Kirill Andreev <andreev@iitp.ru>
parents: 4963
diff changeset
   456
              ((m_rtable->LookupProactive ()).retransmitter == Mac48Address::GetBroadcast ()) ||
9107f67330f3 More than one root works
Kirill Andreev <andreev@iitp.ru>
parents: 4963
diff changeset
   457
              ((m_rtable->LookupProactive ()).metric > preq.GetMetric ())
9107f67330f3 More than one root works
Kirill Andreev <andreev@iitp.ru>
parents: 4963
diff changeset
   458
            )
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   459
            {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   460
              m_rtable->AddProactivePath (
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   461
                  preq.GetMetric (),
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   462
                  preq.GetOriginatorAddress (),
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   463
                  from,
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   464
                  interface,
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   465
                  MicroSeconds (preq.GetLifetime () * 1024),
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   466
                  preq.GetOriginatorSeqNumber ()
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   467
                  );
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   468
              ProactivePathResolved ();
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   469
            }
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   470
          if (!preq.IsNeedNotPrep ())
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   471
            {
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   472
              SendPrep (
4962
00ee1735c339 Bugfixes. Changed traversal time, because 4x4 network does not work
Kirill Andreev <andreev@iitp.ru>
parents: 4961
diff changeset
   473
                  GetAddress (),
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   474
                  preq.GetOriginatorAddress (),
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   475
                  from,
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   476
                  preq.GetMetric (),
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   477
                  preq.GetOriginatorSeqNumber (),
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   478
                  GetNextHwmpSeqno (),
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   479
                  preq.GetLifetime (),
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   480
                  interface
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   481
              );
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   482
            }
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   483
          break;
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   484
        }
4962
00ee1735c339 Bugfixes. Changed traversal time, because 4x4 network does not work
Kirill Andreev <andreev@iitp.ru>
parents: 4961
diff changeset
   485
      if ((*i)->GetDestinationAddress () == GetAddress ())
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   486
        {
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   487
          SendPrep (
4962
00ee1735c339 Bugfixes. Changed traversal time, because 4x4 network does not work
Kirill Andreev <andreev@iitp.ru>
parents: 4961
diff changeset
   488
              GetAddress (),
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   489
              preq.GetOriginatorAddress (),
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   490
              from,
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   491
              (uint32_t)0,
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   492
              preq.GetOriginatorSeqNumber (),
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   493
              GetNextHwmpSeqno (),
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   494
              preq.GetLifetime (),
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   495
              interface
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   496
          );
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   497
          NS_ASSERT(m_rtable->LookupReactive (preq.GetOriginatorAddress ()).retransmitter != Mac48Address::GetBroadcast ());
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   498
          preq.DelDestinationAddressElement ((*i)->GetDestinationAddress ());
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   499
          continue;
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   500
        }
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   501
      //check if can answer:
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   502
      HwmpRtable::LookupResult result = m_rtable->LookupReactive ((*i)->GetDestinationAddress ());
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   503
      if ((! ((*i)->IsDo ())) && (result.retransmitter != Mac48Address::GetBroadcast ()))
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   504
        {
4978
b73c15d25e81 Intermediate reply bugfix
Kirill Andreev <andreev@iitp.ru>
parents: 4972
diff changeset
   505
          //have a valid information and can answer
4983
d10bfc9054a3 Fixed PREQ lifetime
Kirill Andreev <andreev@iitp.ru>
parents: 4980
diff changeset
   506
          //!NB: If there is information from peer - set lifetime as
d10bfc9054a3 Fixed PREQ lifetime
Kirill Andreev <andreev@iitp.ru>
parents: 4980
diff changeset
   507
          //we have got from PREQ, and set the rest lifetime of the
d10bfc9054a3 Fixed PREQ lifetime
Kirill Andreev <andreev@iitp.ru>
parents: 4980
diff changeset
   508
          //route if the information is correct
4998
d6e56ddce2fc Some fixes
Kirill Andreev <andreev@iitp.ru>
parents: 4997
diff changeset
   509
          uint32_t lifetime = result.lifetime.GetMicroSeconds () / 1024;
5134
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   510
          if ((lifetime > 0) && (result.seqnum >= (*i)->GetDestSeqNumber ()))
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   511
            {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   512
              SendPrep (
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   513
                  (*i)->GetDestinationAddress (),
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   514
                  preq.GetOriginatorAddress (),
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   515
                  from,
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   516
                  result.metric,
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   517
                  preq.GetOriginatorSeqNumber (),
5134
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   518
                  result.seqnum,
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   519
                  lifetime,
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   520
                  interface
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   521
                  );
5134
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   522
              if ((*i)->IsRf ())
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   523
                {
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   524
                  (*i)->SetFlags (true, false, (*i)->IsUsn ()); //DO = 1, RF = 0
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   525
                }
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   526
              else
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   527
                {
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   528
                  preq.DelDestinationAddressElement ((*i)->GetDestinationAddress ());
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   529
                  continue;
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   530
                }
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   531
            }
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   532
        }
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   533
    }
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   534
  //check if must retransmit:
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   535
  if (preq.GetDestCount () == 0)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   536
    {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   537
      return;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   538
    }
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   539
  //Forward PREQ to all interfaces:
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   540
  NS_LOG_DEBUG("I am " << GetAddress () << "retransmitting PREQ:" << preq);
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   541
  for (HwmpProtocolMacMap::const_iterator i = m_interfaces.begin (); i != m_interfaces.end (); i ++)
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   542
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   543
      i->second->SendPreq (preq);
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   544
    }
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   545
}
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   546
void
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   547
HwmpProtocol::ReceivePrep (IePrep prep, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric)
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   548
{
4944
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   549
  prep.IncrementMetric (metric);
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   550
  //acceptance cretirea:
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   551
  std::map<Mac48Address, uint32_t>::const_iterator i = m_lastHwmpSeqno.find (prep.GetOriginatorAddress ());
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   552
  if (i == m_lastHwmpSeqno.end ())
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   553
    {
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   554
      m_lastHwmpSeqno[prep.GetOriginatorAddress ()] = prep.GetOriginatorSeqNumber ();
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   555
    }
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   556
  else
4947
c665ebbe99a7 Bugfixes
Kirill Andreev <andreev@iitp.ru>
parents: 4946
diff changeset
   557
  {
4999
467519eba260 Fixed asimmetrical routes
Kirill Andreev <andreev@iitp.ru>
parents: 4998
diff changeset
   558
    if (i->second > prep.GetOriginatorSeqNumber ())
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   559
      {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   560
        return;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   561
      }
4947
c665ebbe99a7 Bugfixes
Kirill Andreev <andreev@iitp.ru>
parents: 4946
diff changeset
   562
    else
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   563
      {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   564
        m_lastHwmpSeqno[prep.GetOriginatorAddress ()] = prep.GetOriginatorSeqNumber ();
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   565
      }
4947
c665ebbe99a7 Bugfixes
Kirill Andreev <andreev@iitp.ru>
parents: 4946
diff changeset
   566
  }
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   567
  //update routing info
4905
cd7eb4fd3829 PREP propagation ported!!!
Kirill Andreev <andreev@iitp.ru>
parents: 4901
diff changeset
   568
  //Now add a path to destination and add precursor to source
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   569
  NS_LOG_DEBUG("I am " << GetAddress () << ", received prep from " << prep.GetOriginatorAddress () << ", receiver was:" << from);
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   570
  HwmpRtable::LookupResult result = m_rtable->LookupReactive (prep.GetDestinationAddress ());
4955
b83a62acbcf2 Added proper flags to HWMP PREQ, routing information is updated in accordance
Kirill Andreev <andreev@iitp.ru>
parents: 4953
diff changeset
   571
  //Add a reactive path only if it is better than existing:
b83a62acbcf2 Added proper flags to HWMP PREQ, routing information is updated in accordance
Kirill Andreev <andreev@iitp.ru>
parents: 4953
diff changeset
   572
  if (
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   573
      ((m_rtable->LookupReactive (prep.GetOriginatorAddress ())).retransmitter == Mac48Address::GetBroadcast ()) ||
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   574
      ((m_rtable->LookupReactive (prep.GetOriginatorAddress ())).metric > prep.GetMetric ())
4955
b83a62acbcf2 Added proper flags to HWMP PREQ, routing information is updated in accordance
Kirill Andreev <andreev@iitp.ru>
parents: 4953
diff changeset
   575
      )
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   576
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   577
      m_rtable->AddReactivePath (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   578
          prep.GetOriginatorAddress (),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   579
          from,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   580
          interface,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   581
          prep.GetMetric (),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   582
          MicroSeconds(prep.GetLifetime () * 1024),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   583
          prep.GetOriginatorSeqNumber ());
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   584
      m_rtable->AddPrecursor (prep.GetDestinationAddress (), interface, from);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   585
      if (result.retransmitter != Mac48Address::GetBroadcast ())
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   586
        {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   587
          m_rtable->AddPrecursor (prep.GetOriginatorAddress (), interface, result.retransmitter);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   588
        }
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   589
      ReactivePathResolved (prep.GetOriginatorAddress ());
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   590
    }
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   591
  if (
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   592
      ((m_rtable->LookupReactive (fromMp)).retransmitter == Mac48Address::GetBroadcast ()) ||
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   593
      ((m_rtable->LookupReactive (fromMp)).metric > prep.GetMetric ())
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   594
      )
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   595
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   596
      m_rtable->AddReactivePath (
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   597
          fromMp,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   598
          from,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   599
          interface,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   600
          metric,
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   601
          MicroSeconds(prep.GetLifetime () * 1024),
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   602
          prep.GetOriginatorSeqNumber ());
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   603
      ReactivePathResolved (fromMp);
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   604
    }
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   605
  if (prep.GetDestinationAddress () == GetAddress ())
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   606
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   607
      NS_LOG_DEBUG("I am "<<GetAddress ()<<", resolved "<<prep.GetOriginatorAddress ());
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   608
      return;
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   609
    }
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   610
  if (result.retransmitter == Mac48Address::GetBroadcast ())
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   611
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   612
      //try to look for default route
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   613
      result = m_rtable->LookupProactive ();
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   614
    }
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   615
  if (result.retransmitter == Mac48Address::GetBroadcast ())
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   616
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   617
      return;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   618
    }
4905
cd7eb4fd3829 PREP propagation ported!!!
Kirill Andreev <andreev@iitp.ru>
parents: 4901
diff changeset
   619
  //Forward PREP
5087
444caf312d1e Fixed names
Kirill Andreev <andreev@iitp.ru>
parents: 5086
diff changeset
   620
  HwmpProtocolMacMap::const_iterator prep_sender = m_interfaces.find (result.ifIndex);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   621
  NS_ASSERT (prep_sender != m_interfaces.end ());
4998
d6e56ddce2fc Some fixes
Kirill Andreev <andreev@iitp.ru>
parents: 4997
diff changeset
   622
  prep_sender->second->SendPrep (prep, result.retransmitter);
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   623
}
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   624
void
5113
a912d4372406 PREQ, PREP overflow is handled correctly
Kirill Andreev <andreev@iitp.ru>
parents: 5111
diff changeset
   625
HwmpProtocol::ReceivePerr (std::vector<IePerr::FailedDestination> destinations, Mac48Address from, uint32_t interface, Mac48Address fromMp)
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   626
{
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   627
  //Acceptance cretirea:
4962
00ee1735c339 Bugfixes. Changed traversal time, because 4x4 network does not work
Kirill Andreev <andreev@iitp.ru>
parents: 4961
diff changeset
   628
  NS_LOG_DEBUG("I am "<<GetAddress ()<<", received PERR from "<<from);
5113
a912d4372406 PREQ, PREP overflow is handled correctly
Kirill Andreev <andreev@iitp.ru>
parents: 5111
diff changeset
   629
  std::vector<IePerr::FailedDestination> retval;
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   630
  HwmpRtable::LookupResult result;
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   631
  for (unsigned int i = 0; i < destinations.size (); i ++)
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   632
  {
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   633
    result = m_rtable->LookupReactive (destinations[i].destination);
5113
a912d4372406 PREQ, PREP overflow is handled correctly
Kirill Andreev <andreev@iitp.ru>
parents: 5111
diff changeset
   634
    if (!(
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   635
        (result.retransmitter != from) ||
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   636
        (result.ifIndex != interface) ||
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   637
        (result.seqnum > destinations[i].seqnum)
5113
a912d4372406 PREQ, PREP overflow is handled correctly
Kirill Andreev <andreev@iitp.ru>
parents: 5111
diff changeset
   638
        ))
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   639
      {
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   640
        retval.push_back (destinations[i]);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   641
      }
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   642
  }
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   643
  if (retval.size () == 0)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   644
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   645
      return;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   646
    }
5113
a912d4372406 PREQ, PREP overflow is handled correctly
Kirill Andreev <andreev@iitp.ru>
parents: 5111
diff changeset
   647
  ForwardPathError (MakePathError (retval));
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   648
}
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   649
void
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   650
HwmpProtocol::SendPrep (
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   651
    Mac48Address src,
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   652
    Mac48Address dst,
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   653
    Mac48Address retransmitter,
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   654
    uint32_t initMetric,
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   655
    uint32_t originatorDsn,
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   656
    uint32_t destinationSN,
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   657
    uint32_t lifetime,
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   658
    uint32_t interface)
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   659
{
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   660
  IePrep prep;
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   661
  prep.SetHopcount (0);
4905
cd7eb4fd3829 PREP propagation ported!!!
Kirill Andreev <andreev@iitp.ru>
parents: 4901
diff changeset
   662
  prep.SetTtl (m_maxTtl);
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   663
  prep.SetDestinationAddress (dst);
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   664
  prep.SetDestinationSeqNumber (destinationSN);
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   665
  prep.SetLifetime (lifetime);
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   666
  prep.SetMetric (0);
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   667
  prep.SetOriginatorAddress (src);
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   668
  prep.SetOriginatorSeqNumber (originatorDsn);
5087
444caf312d1e Fixed names
Kirill Andreev <andreev@iitp.ru>
parents: 5086
diff changeset
   669
  HwmpProtocolMacMap::const_iterator prep_sender = m_interfaces.find (interface);
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   670
  NS_ASSERT(prep_sender != m_interfaces.end ());
4998
d6e56ddce2fc Some fixes
Kirill Andreev <andreev@iitp.ru>
parents: 4997
diff changeset
   671
  prep_sender->second->SendPrep (prep, retransmitter);
5108
c7e52ca238d3 HWMP-Statistics: added number of initiated PREQ, PREP, PERR
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   672
  m_stats.initiatedPrep ++;
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
   673
}
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   674
bool
4888
dec245c213ab Attach interfaces replaced with Install. Helper is simplifyed
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
   675
HwmpProtocol::Install (Ptr<MeshPointDevice> mp)
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   676
{
4888
dec245c213ab Attach interfaces replaced with Install. Helper is simplifyed
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
   677
  m_mp = mp;
dec245c213ab Attach interfaces replaced with Install. Helper is simplifyed
Kirill Andreev <andreev@iitp.ru>
parents: 4887
diff changeset
   678
  std::vector<Ptr<NetDevice> > interfaces = mp->GetInterfaces ();
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   679
  for (std::vector<Ptr<NetDevice> >::const_iterator i = interfaces.begin (); i != interfaces.end (); i++)
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   680
    {
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: 4896
diff changeset
   681
      // Checking for compatible net device
5012
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5010
diff changeset
   682
      Ptr<WifiNetDevice> wifiNetDev = (*i)->GetObject<WifiNetDevice> ();
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5010
diff changeset
   683
      if (wifiNetDev == 0)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   684
        {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   685
          return false;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   686
        }
5012
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5010
diff changeset
   687
      Ptr<MeshWifiInterfaceMac>  mac = wifiNetDev->GetMac ()->GetObject<MeshWifiInterfaceMac> ();
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5010
diff changeset
   688
      if (mac == 0)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   689
        {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   690
          return false;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   691
        }
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: 4896
diff changeset
   692
      // Installing plugins:
5086
fccfd0073ea3 Fixed names: now protocols are called *-protocol.[h,cc], plugin is called
Kirill Andreev <andreev@iitp.ru>
parents: 5083
diff changeset
   693
      Ptr<HwmpProtocolMac> hwmpMac = Create<HwmpProtocolMac> (wifiNetDev->GetIfIndex (), this);
4887
cbf02c77d5c1 HWMP is attached to mesh point device and MAC layer with zero functionality
Kirill Andreev <andreev@iitp.ru>
parents: 4886
diff changeset
   694
      m_interfaces[wifiNetDev->GetIfIndex ()] = hwmpMac;
cbf02c77d5c1 HWMP is attached to mesh point device and MAC layer with zero functionality
Kirill Andreev <andreev@iitp.ru>
parents: 4886
diff changeset
   695
      mac->InstallPlugin (hwmpMac);
5054
49851228eec9 Added interface helper
Kirill Andreev <andreev@iitp.ru>
parents: 5046
diff changeset
   696
      //Installing airtime link metric:
49851228eec9 Added interface helper
Kirill Andreev <andreev@iitp.ru>
parents: 5046
diff changeset
   697
      Ptr<AirtimeLinkMetricCalculator> metric = CreateObject <AirtimeLinkMetricCalculator> ();
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   698
      mac->SetLinkMetricCallback (MakeCallback (&AirtimeLinkMetricCalculator::CalculateMetric, metric));
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   699
    }
4905
cd7eb4fd3829 PREP propagation ported!!!
Kirill Andreev <andreev@iitp.ru>
parents: 4901
diff changeset
   700
  mp->SetRoutingProtocol (this);
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: 4896
diff changeset
   701
  // Mesh point aggregates all installed protocols
4905
cd7eb4fd3829 PREP propagation ported!!!
Kirill Andreev <andreev@iitp.ru>
parents: 4901
diff changeset
   702
  mp->AggregateObject (this);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   703
  m_address = Mac48Address::ConvertFrom (mp->GetAddress ());// address;
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   704
  return true;
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   705
}
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   706
void
4933
72f0481cfb2d Peer link restructured to support multi-interface
Kirill Andreev <andreev@iitp.ru>
parents: 4926
diff changeset
   707
HwmpProtocol::PeerLinkStatus(Mac48Address meshPointAddress, Mac48Address peerAddress, uint32_t interface, bool status)
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   708
{
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   709
  if (status)
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   710
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   711
      return;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   712
    }
4996
33f418524356 Fixed routing information with neighbours, fixed address3 in management
Kirill Andreev <andreev@iitp.ru>
parents: 4995
diff changeset
   713
  std::vector<IePerr::FailedDestination> destinations = m_rtable->GetUnreachableDestinations (peerAddress);
5111
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   714
  InitiatePathError (MakePathError (destinations));
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   715
}
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   716
void
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   717
HwmpProtocol::SetNeighboursCallback (Callback<std::vector<Mac48Address>, uint32_t> cb)
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   718
{
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   719
  m_neighboursCallback = cb;
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   720
}
4889
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   721
bool
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   722
HwmpProtocol::DropDataFrame (uint32_t seqno, Mac48Address source)
4889
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   723
{
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   724
  if (source == GetAddress ())
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   725
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   726
      return true;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   727
    }
4945
e64c6bfd8536 Bugfixes
Kirill Andreev <andreev@iitp.ru>
parents: 4944
diff changeset
   728
  std::map<Mac48Address, uint32_t,std::less<Mac48Address> >::const_iterator i = m_lastDataSeqno.find (source);
4889
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   729
  if (i == m_lastDataSeqno.end ())
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   730
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   731
      m_lastDataSeqno[source] = seqno;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   732
    }
4889
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   733
  else
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   734
  {
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   735
    if (i->second >= seqno)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   736
      {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   737
        return true;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   738
      }
4889
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   739
    m_lastDataSeqno[source] = seqno;
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   740
  }
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   741
  return false;
279b07de3327 Fixrd bugs with address extensions, broadcast frames can go through L2Routing
Kirill Andreev <andreev@iitp.ru>
parents: 4888
diff changeset
   742
}
5111
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   743
HwmpProtocol::PathError
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   744
HwmpProtocol::MakePathError (std::vector<IePerr::FailedDestination> destinations)
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   745
{
5111
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   746
  PathError retval;
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   747
  //HwmpRtable increments a sequence number as written in 11B.9.7.2
5111
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   748
  retval.receivers = GetPerrReceivers (destinations);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   749
  if (retval.receivers.size () == 0)
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   750
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   751
      return retval;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   752
    }
5108
c7e52ca238d3 HWMP-Statistics: added number of initiated PREQ, PREP, PERR
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
   753
  m_stats.initiatedPerr ++;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   754
  for (unsigned int i = 0; i < destinations.size (); i ++)
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   755
  {
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   756
    retval.destinations.push_back (destinations[i]);
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   757
    m_rtable->DeleteReactivePath (destinations[i].destination);
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   758
  }
5111
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   759
  return retval;
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   760
}
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   761
void
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   762
HwmpProtocol::InitiatePathError(PathError perr)
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   763
{
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   764
  for (HwmpProtocolMacMap::const_iterator i =  m_interfaces.begin (); i != m_interfaces.end (); i ++)
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   765
  {
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   766
    std::vector<Mac48Address> receivers_for_interface;
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   767
    for (unsigned int j = 0; j < perr.receivers.size (); j ++)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   768
      {
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   769
        if (i->first == perr.receivers[j].first)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   770
          {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   771
            receivers_for_interface.push_back (perr.receivers[j].second);
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   772
          }
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   773
      }
5113
a912d4372406 PREQ, PREP overflow is handled correctly
Kirill Andreev <andreev@iitp.ru>
parents: 5111
diff changeset
   774
    i->second->InitiatePerr (perr.destinations, receivers_for_interface);
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
   775
  }
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   776
}
5111
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   777
void
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   778
HwmpProtocol::ForwardPathError(PathError perr)
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   779
{
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   780
  for (HwmpProtocolMacMap::const_iterator i =  m_interfaces.begin (); i != m_interfaces.end (); i ++)
5111
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   781
  {
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   782
    std::vector<Mac48Address> receivers_for_interface;
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   783
    for (unsigned int j = 0; j < perr.receivers.size (); j ++)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   784
      {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   785
        if (i->first == perr.receivers[j].first)
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   786
          {
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   787
            receivers_for_interface.push_back (perr.receivers[j].second);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   788
          }
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   789
      }
5113
a912d4372406 PREQ, PREP overflow is handled correctly
Kirill Andreev <andreev@iitp.ru>
parents: 5111
diff changeset
   790
    i->second->ForwardPerr (perr.destinations, receivers_for_interface);
5111
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   791
  }
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   792
}
018748653ea8 Fixed PERR propagation
Kirill Andreev <andreev@iitp.ru>
parents: 5108
diff changeset
   793
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   794
std::vector<std::pair<uint32_t, Mac48Address> >
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   795
HwmpProtocol::GetPerrReceivers (std::vector<IePerr::FailedDestination> failedDest)
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   796
{
4920
fbd04c749aaa HwmpRtable unit test + cleanup
Pavel Boyko <boyko@iitp.ru>
parents: 4919
diff changeset
   797
  HwmpRtable::PrecursorList retval;
4852
123dc54d734e Coding style changes: indentation (some fixes), spaces in operators, function
Andrey Mazo <mazo@iitp.ru>
parents: 4837
diff changeset
   798
  for (unsigned int i = 0; i < failedDest.size (); i ++)
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   799
  {
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   800
    HwmpRtable::PrecursorList precursors = m_rtable->GetPrecursors (failedDest[i].destination);
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   801
    m_rtable->DeleteReactivePath (failedDest[i].destination);
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   802
    m_rtable->DeleteProactivePath (failedDest[i].destination);
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   803
    for (unsigned int j = 0; j < precursors.size (); j ++)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   804
      {
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   805
        retval.push_back (precursors[j]);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   806
      }
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   807
  }
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   808
  //Check if we have dublicates in retval and precursors:
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   809
  for (unsigned int i = 0; i < retval.size (); i ++)
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   810
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   811
      for (unsigned int j = i+1; j < retval.size (); j ++)
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   812
        {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   813
          if (retval[i].second == retval[j].second)
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   814
            {
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   815
              retval.erase (retval.begin () + j);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   816
            }
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   817
        }
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   818
    }
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   819
  return retval;
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   820
}
4895
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
   821
std::vector<Mac48Address>
4900
0c34a34208f2 restructured precursors in rtable
Kirill Andreev <andreev@iitp.ru>
parents: 4898
diff changeset
   822
HwmpProtocol::GetPreqReceivers (uint32_t interface)
4895
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
   823
{
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
   824
  std::vector<Mac48Address> retval;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   825
  if (!m_neighboursCallback.IsNull ())
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   826
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   827
      retval = m_neighboursCallback (interface);
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   828
    }
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   829
  if ((retval.size () >= m_unicastPreqThreshold) || (retval.size () == 0))
4919
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   830
  {
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   831
    retval.clear ();
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   832
    retval.push_back (Mac48Address::GetBroadcast ());
b8a0476c7e06 Added unicast PREQ, peer link status callback.
Kirill Andreev <andreev@iitp.ru>
parents: 4918
diff changeset
   833
  }
4895
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
   834
  return retval;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
   835
}
4944
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   836
std::vector<Mac48Address>
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   837
HwmpProtocol::GetBroadcastReceivers (uint32_t interface)
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   838
{
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   839
  std::vector<Mac48Address> retval;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   840
  if (!m_neighboursCallback.IsNull ())
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   841
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   842
      retval = m_neighboursCallback (interface);
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   843
    }
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   844
  if ((retval.size () >= m_unicastDataThreshold) || (retval.size () == 0))
4944
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   845
  {
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   846
    retval.clear ();
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   847
    retval.push_back (Mac48Address::GetBroadcast ());
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   848
  }
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   849
  return retval;
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   850
}
779b641cff5a Unicast chain instead of broadcast data frame added. Metric
Kirill Andreev <andreev@iitp.ru>
parents: 4943
diff changeset
   851
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   852
bool
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   853
HwmpProtocol::QueuePacket (QueuedPacket packet)
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   854
{
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   855
  if (m_rqueue.size () > m_maxQueueSize)
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   856
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   857
      return false;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   858
    }
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   859
  m_rqueue.push_back (packet);
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   860
  return true;
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   861
}
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   862
4993
464ce7d8a940 Route requests queueing moved from base MeshL2RoutingProtocol to derived HwmpRoutingProtocol
Pavel Boyko <boyko@iitp.ru>
parents: 4989
diff changeset
   863
HwmpProtocol::QueuedPacket
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   864
HwmpProtocol::DequeueFirstPacketByDst (Mac48Address dst)
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   865
{
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   866
  QueuedPacket retval;
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   867
  retval.pkt = 0;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   868
  for (std::vector<QueuedPacket>::iterator i = m_rqueue.begin (); i != m_rqueue.end (); i++)
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   869
    {
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   870
      if ((*i).dst == dst)
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   871
        {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   872
          retval = (*i);
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   873
          m_rqueue.erase (i);
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   874
          break;
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   875
        }
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   876
    }
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   877
  return retval;
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   878
}
4993
464ce7d8a940 Route requests queueing moved from base MeshL2RoutingProtocol to derived HwmpRoutingProtocol
Pavel Boyko <boyko@iitp.ru>
parents: 4989
diff changeset
   879
464ce7d8a940 Route requests queueing moved from base MeshL2RoutingProtocol to derived HwmpRoutingProtocol
Pavel Boyko <boyko@iitp.ru>
parents: 4989
diff changeset
   880
HwmpProtocol::QueuedPacket
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   881
HwmpProtocol::DequeueFirstPacket ()
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   882
{
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   883
  QueuedPacket retval;
5066
94d5c01b1534 Fixed tests, removes NS_ASSERT (false)
Kirill Andreev <andreev@iitp.ru>
parents: 5063
diff changeset
   884
  retval.pkt = 0;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   885
  if (m_rqueue.size () != 0)
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   886
    {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   887
      retval = m_rqueue[0];
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   888
      m_rqueue.erase (m_rqueue.begin ());
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   889
    }
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   890
  return retval;
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   891
}
4993
464ce7d8a940 Route requests queueing moved from base MeshL2RoutingProtocol to derived HwmpRoutingProtocol
Pavel Boyko <boyko@iitp.ru>
parents: 4989
diff changeset
   892
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   893
void
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   894
HwmpProtocol::ReactivePathResolved (Mac48Address dst)
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   895
{
4852
123dc54d734e Coding style changes: indentation (some fixes), spaces in operators, function
Andrey Mazo <mazo@iitp.ru>
parents: 4837
diff changeset
   896
  HwmpRtable::LookupResult result = m_rtable->LookupReactive (dst);
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   897
  NS_ASSERT(result.retransmitter != Mac48Address::GetBroadcast ());
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   898
  //Send all packets stored for this destination
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   899
  QueuedPacket packet = DequeueFirstPacketByDst (dst);
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   900
  while (packet.pkt != 0)
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   901
  {
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   902
    //set RA tag for retransmitter:
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   903
    HwmpTag tag;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   904
    packet.pkt->RemovePacketTag (tag);
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   905
    tag.SetAddress (result.retransmitter);
4918
00c83f6ae8b7 Ported to new tags
Kirill Andreev <andreev@iitp.ru>
parents: 4906
diff changeset
   906
    packet.pkt->AddPacketTag (tag);
5038
0b8f9da17a56 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5035
diff changeset
   907
    m_stats.txUnicast ++;
0b8f9da17a56 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5035
diff changeset
   908
    m_stats.txBytes += packet.pkt->GetSize ();
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   909
    packet.reply (true, packet.pkt, packet.src, packet.dst, packet.protocol, result.ifIndex);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   910
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   911
    packet = DequeueFirstPacketByDst (dst);
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   912
  }
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   913
}
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   914
void
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   915
HwmpProtocol::ProactivePathResolved ()
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   916
{
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   917
  //send all packets to root
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   918
  HwmpRtable::LookupResult result = m_rtable->LookupProactive ();
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   919
  NS_ASSERT (result.retransmitter != Mac48Address::GetBroadcast ());
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   920
  QueuedPacket packet = DequeueFirstPacket ();
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   921
  while (packet.pkt != 0)
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   922
  {
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   923
    //set RA tag for retransmitter:
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   924
    HwmpTag tag;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   925
    if (!packet.pkt->RemovePacketTag (tag))
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   926
      {
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   927
        NS_FATAL_ERROR ("HWMP tag must be present at this point");
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   928
      }
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   929
    tag.SetAddress (result.retransmitter);
4918
00c83f6ae8b7 Ported to new tags
Kirill Andreev <andreev@iitp.ru>
parents: 4906
diff changeset
   930
    packet.pkt->AddPacketTag (tag);
5038
0b8f9da17a56 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5035
diff changeset
   931
    m_stats.txUnicast ++;
0b8f9da17a56 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5035
diff changeset
   932
    m_stats.txBytes += packet.pkt->GetSize ();
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   933
    packet.reply (true, packet.pkt, packet.src, packet.dst, packet.protocol, result.ifIndex);
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
   934
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   935
    packet = DequeueFirstPacket ();
4894
a6cf8696922a HwmpProtocol: path error procedure reviewed, RequestRoute reviewed
Kirill Andreev <andreev@iitp.ru>
parents: 4893
diff changeset
   936
  }
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   937
}
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   938
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   939
bool
4886
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
   940
HwmpProtocol::ShouldSendPreq (Mac48Address dst)
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   941
{
4945
e64c6bfd8536 Bugfixes
Kirill Andreev <andreev@iitp.ru>
parents: 4944
diff changeset
   942
  std::map<Mac48Address, EventId>::const_iterator i = m_preqTimeouts.find (dst);
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   943
  if (i == m_preqTimeouts.end ())
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   944
    {
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   945
      m_preqTimeouts[dst] = Simulator::Schedule (
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   946
          MilliSeconds (2*(m_dot11MeshHWMPnetDiameterTraversalTime.GetMilliSeconds())),
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   947
          &HwmpProtocol::RetryPathDiscovery, this, dst, 0);
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   948
      return true;
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   949
    }
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   950
  return false;
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   951
}
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   952
void
4886
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
   953
HwmpProtocol::RetryPathDiscovery (Mac48Address dst, uint8_t numOfRetry)
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   954
{
4852
123dc54d734e Coding style changes: indentation (some fixes), spaces in operators, function
Andrey Mazo <mazo@iitp.ru>
parents: 4837
diff changeset
   955
  HwmpRtable::LookupResult result = m_rtable->LookupReactive (dst);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   956
  if (result.retransmitter == Mac48Address::GetBroadcast ())
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   957
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   958
      result = m_rtable->LookupProactive ();
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   959
    }
4852
123dc54d734e Coding style changes: indentation (some fixes), spaces in operators, function
Andrey Mazo <mazo@iitp.ru>
parents: 4837
diff changeset
   960
  if (result.retransmitter != Mac48Address::GetBroadcast ())
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   961
    {
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   962
      std::map<Mac48Address, EventId>::iterator i = m_preqTimeouts.find (dst);
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   963
      NS_ASSERT (i !=  m_preqTimeouts.end ());
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   964
      m_preqTimeouts.erase (i);
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   965
      return;
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   966
    }
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   967
  numOfRetry++;
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   968
  if (numOfRetry > m_dot11MeshHWMPmaxPREQretries)
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   969
    {
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   970
      QueuedPacket packet = DequeueFirstPacketByDst (dst);
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   971
      //purge queue and delete entry from retryDatabase
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   972
      while (packet.pkt != 0)
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   973
        {
5010
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
   974
          m_stats.totalDropped ++;
4852
123dc54d734e Coding style changes: indentation (some fixes), spaces in operators, function
Andrey Mazo <mazo@iitp.ru>
parents: 4837
diff changeset
   975
          packet.reply (false, packet.pkt, packet.src, packet.dst, packet.protocol, HwmpRtable::MAX_METRIC);
5063
97b947e83640 Faker's code review response
Pavel Boyko <boyko@iitp.ru>
parents: 5057
diff changeset
   976
          packet = DequeueFirstPacketByDst (dst);
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   977
        }
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   978
      std::map<Mac48Address, EventId>::iterator i = m_preqTimeouts.find (dst);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   979
      NS_ASSERT (i !=  m_preqTimeouts.end ());
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   980
      m_preqTimeouts.erase (i);
4812
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   981
      return;
adcb26652e1d Coding style changes: indentation, spaces.
Andrey Mazo <mazo@iitp.ru>
parents: 4809
diff changeset
   982
    }
4955
b83a62acbcf2 Added proper flags to HWMP PREQ, routing information is updated in accordance
Kirill Andreev <andreev@iitp.ru>
parents: 4953
diff changeset
   983
  uint32_t originator_seqno = GetNextHwmpSeqno ();
5134
26472734b69f Fixed seqno in HWMP
Kirill Andreev <andreev@iitp.ru>
parents: 5132
diff changeset
   984
  uint32_t dst_seqno = m_rtable->LookupReactiveExpired (dst).seqnum;
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   985
  for (HwmpProtocolMacMap::const_iterator i = m_interfaces.begin (); i != m_interfaces.end (); i ++)
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   986
    {
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   987
      i->second->RequestDestination (dst, originator_seqno, dst_seqno);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
   988
    }
4892
cdd13648776b Removed dot11s-parameters and they are made as attributes
Kirill Andreev <andreev@iitp.ru>
parents: 4891
diff changeset
   989
  m_preqTimeouts[dst] = Simulator::Schedule (
4893
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   990
      MilliSeconds (2*(m_dot11MeshHWMPnetDiameterTraversalTime.GetMilliSeconds())),
d390c2dd2f14 Restructured rtable, queue size moved from protocol setter to attribute
Kirill Andreev <andreev@iitp.ru>
parents: 4892
diff changeset
   991
      &HwmpProtocol::RetryPathDiscovery, this, dst, numOfRetry);
4793
4f6a6772628e Merge 802.11s code.
Andrey Mazo <mazo@iitp.ru>
parents:
diff changeset
   992
}
4895
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
   993
//Proactive PREQ routines:
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
   994
void
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
   995
HwmpProtocol::SetRoot ()
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
   996
{
4964
9107f67330f3 More than one root works
Kirill Andreev <andreev@iitp.ru>
parents: 4963
diff changeset
   997
  UniformVariable coefficient (0.0, m_randomStart.GetSeconds());
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
   998
  Time randomStart = Seconds (coefficient.GetValue ());
4964
9107f67330f3 More than one root works
Kirill Andreev <andreev@iitp.ru>
parents: 4963
diff changeset
   999
  m_proactivePreqTimer = Simulator::Schedule (randomStart, &HwmpProtocol::SendProactivePreq, this);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
  1000
  NS_LOG_DEBUG ("ROOT IS: " << m_address);
4895
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1001
  SendProactivePreq ();
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1002
  m_isRoot = true;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1003
}
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1004
void
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1005
HwmpProtocol::UnsetRoot ()
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1006
{
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1007
  m_proactivePreqTimer.Cancel ();
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1008
}
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1009
void
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1010
HwmpProtocol::SendProactivePreq ()
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1011
{
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1012
  IePreq preq;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1013
  //By default: must answer
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1014
  preq.SetHopcount (0);
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1015
  preq.SetTTL (m_maxTtl);
4963
869399fad0b6 Fixed proactive mode. 1 root works
Kirill Andreev <andreev@iitp.ru>
parents: 4962
diff changeset
  1016
  preq.SetLifetime (m_dot11MeshHWMPactiveRootTimeout.GetMicroSeconds () /1024);
4895
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1017
  //\attention: do not forget to set originator address, sequence
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1018
  //number and preq ID in HWMP-MAC plugin
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1019
  preq.AddDestinationAddressElement (true, true, Mac48Address::GetBroadcast (), 0);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
  1020
  preq.SetOriginatorAddress (GetAddress ());
4963
869399fad0b6 Fixed proactive mode. 1 root works
Kirill Andreev <andreev@iitp.ru>
parents: 4962
diff changeset
  1021
  preq.SetPreqID (GetNextPreqId ());
869399fad0b6 Fixed proactive mode. 1 root works
Kirill Andreev <andreev@iitp.ru>
parents: 4962
diff changeset
  1022
  preq.SetOriginatorSeqNumber (GetNextHwmpSeqno ());
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
  1023
  for (HwmpProtocolMacMap::const_iterator i = m_interfaces.begin (); i != m_interfaces.end (); i ++)
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
  1024
    {
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
  1025
      i->second->SendPreq (preq);
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
  1026
    }
4963
869399fad0b6 Fixed proactive mode. 1 root works
Kirill Andreev <andreev@iitp.ru>
parents: 4962
diff changeset
  1027
  m_proactivePreqTimer = Simulator::Schedule (m_dot11MeshHWMPpathToRootInterval, &HwmpProtocol::SendProactivePreq, this);
4895
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1028
}
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1029
bool
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1030
HwmpProtocol::GetDoFlag ()
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1031
{
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1032
  return m_doFlag;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1033
}
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1034
bool
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1035
HwmpProtocol::GetRfFlag ()
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1036
{
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1037
  return m_rfFlag;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1038
}
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1039
Time
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1040
HwmpProtocol::GetPreqMinInterval ()
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1041
{
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1042
  return m_dot11MeshHWMPpreqMinInterval;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1043
}
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1044
Time
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1045
HwmpProtocol::GetPerrMinInterval ()
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1046
{
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1047
  return m_dot11MeshHWMPperrMinInterval;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1048
}
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1049
uint8_t
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1050
HwmpProtocol::GetMaxTtl ()
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1051
{
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1052
  return m_maxTtl;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1053
}
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1054
uint32_t
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1055
HwmpProtocol::GetNextPreqId ()
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1056
{
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1057
  m_preqId ++;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1058
  return m_preqId;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1059
}
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1060
uint32_t
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1061
HwmpProtocol::GetNextHwmpSeqno ()
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1062
{
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1063
  m_hwmpSeqno ++;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1064
  return m_hwmpSeqno;
b68a1309a89e First PREQ delivered
Kirill Andreev <andreev@iitp.ru>
parents: 4894
diff changeset
  1065
}
4896
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
  1066
uint32_t
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
  1067
HwmpProtocol::GetActivePathLifetime ()
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
  1068
{
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
  1069
  return m_dot11MeshHWMPactivePathTimeout.GetMicroSeconds () / 1024;
e579c19f0dee Preq propagation ported:)
Kirill Andreev <andreev@iitp.ru>
parents: 4895
diff changeset
  1070
}
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
  1071
uint8_t
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
  1072
HwmpProtocol::GetUnicastPerrThreshold ()
4923
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
  1073
{
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
  1074
  return m_unicastPerrThreshold;
9ea8561480a2 Reactive HWMP is ported!
Kirill Andreev <andreev@iitp.ru>
parents: 4919
diff changeset
  1075
}
4905
cd7eb4fd3829 PREP propagation ported!!!
Kirill Andreev <andreev@iitp.ru>
parents: 4901
diff changeset
  1076
Mac48Address
cd7eb4fd3829 PREP propagation ported!!!
Kirill Andreev <andreev@iitp.ru>
parents: 4901
diff changeset
  1077
HwmpProtocol::GetAddress ()
cd7eb4fd3829 PREP propagation ported!!!
Kirill Andreev <andreev@iitp.ru>
parents: 4901
diff changeset
  1078
{
cd7eb4fd3829 PREP propagation ported!!!
Kirill Andreev <andreev@iitp.ru>
parents: 4901
diff changeset
  1079
  return m_address;
cd7eb4fd3829 PREP propagation ported!!!
Kirill Andreev <andreev@iitp.ru>
parents: 4901
diff changeset
  1080
}
5010
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
  1081
//Statistics:
5126
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1082
HwmpProtocol::Statistics::Statistics () :
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1083
  txUnicast (0),
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1084
  txBroadcast (0),
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1085
  txBytes (0),
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1086
  droppedTtl (0),
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1087
  totalQueued (0),
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1088
  totalDropped (0),
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1089
  initiatedPreq (0),
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1090
  initiatedPrep (0),
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1091
  initiatedPerr (0)
8e06088a785d Statistics removed from headers
Kirill Andreev <andreev@iitp.ru>
parents: 5124
diff changeset
  1092
{}
5010
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
  1093
void HwmpProtocol::Statistics::Print (std::ostream & os) const
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
  1094
{
5015
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1095
  os << "<Statistics "
5038
0b8f9da17a56 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5035
diff changeset
  1096
    "txUnicast=\"" << txUnicast << "\" "
0b8f9da17a56 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5035
diff changeset
  1097
    "txBroadcast=\"" << txBroadcast << "\" "
5098
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
  1098
    "txBytes=\"" << txBytes << "\" "
5039
65524e2ec376 Added dropped TTL field to stats
Kirill Andreev <andreev@iitp.ru>
parents: 5038
diff changeset
  1099
    "droppedTtl=\"" << droppedTtl << "\" "
5015
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1100
    "totalQueued=\"" << totalQueued << "\" "
5108
c7e52ca238d3 HWMP-Statistics: added number of initiated PREQ, PREP, PERR
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
  1101
    "totalDropped=\"" << totalDropped << "\" "
c7e52ca238d3 HWMP-Statistics: added number of initiated PREQ, PREP, PERR
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
  1102
    "initiatedPreq=\"" << initiatedPreq << "\" "
c7e52ca238d3 HWMP-Statistics: added number of initiated PREQ, PREP, PERR
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
  1103
    "initiatedPrep=\"" << initiatedPrep << "\" "
c7e52ca238d3 HWMP-Statistics: added number of initiated PREQ, PREP, PERR
Kirill Andreev <andreev@iitp.ru>
parents: 5098
diff changeset
  1104
    "initiatedPerr=\"" << initiatedPerr << "\"\n";
5010
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
  1105
}
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
  1106
void
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
  1107
HwmpProtocol::Report (std::ostream & os) const
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
  1108
{
5015
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1109
  os << "<Hwmp "
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1110
    "address=\"" << m_address << "\"\n"
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1111
    "maxQueueSize=\"" << m_maxQueueSize << "\"\n"
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1112
    "dot11MeshHWMPmaxPREQretries=\"" << (uint16_t)m_dot11MeshHWMPmaxPREQretries << "\"\n"
5098
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
  1113
    "dot11MeshHWMPnetDiameterTraversalTime=\"" << m_dot11MeshHWMPnetDiameterTraversalTime.GetSeconds () << "\"\n"
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
  1114
    "dot11MeshHWMPpreqMinInterval=\"" << m_dot11MeshHWMPpreqMinInterval.GetSeconds () << "\"\n"
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
  1115
    "dot11MeshHWMPperrMinInterval=\"" << m_dot11MeshHWMPperrMinInterval.GetSeconds () << "\"\n"
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
  1116
    "dot11MeshHWMPactiveRootTimeout=\"" << m_dot11MeshHWMPactiveRootTimeout.GetSeconds () << "\"\n"
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
  1117
    "dot11MeshHWMPactivePathTimeout=\"" << m_dot11MeshHWMPactivePathTimeout.GetSeconds () << "\"\n"
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
  1118
    "dot11MeshHWMPpathToRootInterval=\"" << m_dot11MeshHWMPpathToRootInterval.GetSeconds () << "\"\n"
13ded9ff11c4 XML reports simplified for better parsing
Pavel Boyko <boyko@iitp.ru>
parents: 5087
diff changeset
  1119
    "dot11MeshHWMPrannInterval=\"" << m_dot11MeshHWMPrannInterval.GetSeconds () << "\"\n"
5015
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1120
    "isRoot=\"" << m_isRoot << "\"\n"
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1121
    "maxTtl=\"" << (uint16_t)m_maxTtl << "\"\n"
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1122
    "unicastPerrThreshold=\"" << (uint16_t)m_unicastPerrThreshold << "\"\n"
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1123
    "unicastPreqThreshold=\"" << (uint16_t)m_unicastPreqThreshold << "\"\n"
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1124
    "unicastDataThreshold=\"" << (uint16_t)m_unicastDataThreshold << "\"\n"
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1125
    "doFlag=\"" << m_doFlag << "\"\n"
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1126
    "rfFlag=\"" << m_rfFlag << "\">\n";
5010
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
  1127
  m_stats.Print (os);
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
  1128
  for (HwmpProtocolMacMap::const_iterator plugin = m_interfaces.begin (); plugin != m_interfaces.end (); plugin ++)
5012
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5010
diff changeset
  1129
  {
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
  1130
    plugin->second->Report (os);
5012
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5010
diff changeset
  1131
  }
c81291702113 Statistics - almost done
Kirill Andreev <andreev@iitp.ru>
parents: 5010
diff changeset
  1132
  os << "</Hwmp>\n";
5010
bc885417e41e Added statistcs structures
Kirill Andreev <andreev@iitp.ru>
parents: 5001
diff changeset
  1133
}
5013
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
  1134
void
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
  1135
HwmpProtocol::ResetStats ()
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
  1136
{
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
  1137
  m_stats = Statistics::Statistics ();
5124
e206046b2e44 removed GetElementId from *.h files. Fixed spaces before '(' and added {} when needed.
Kirill Andreev <andreev@iitp.ru>
parents: 5113
diff changeset
  1138
  for (HwmpProtocolMacMap::const_iterator plugin = m_interfaces.begin (); plugin != m_interfaces.end (); plugin ++)
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
  1139
    {
5015
e460e29f9f78 Statistics fixed
Kirill Andreev <andreev@iitp.ru>
parents: 5014
diff changeset
  1140
    plugin->second->ResetStats ();
5129
5688b8da4526 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5126
diff changeset
  1141
    }
5013
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
  1142
}
290579bb1c1b ResetStats added
Kirill Andreev <andreev@iitp.ru>
parents: 5012
diff changeset
  1143
4886
bdbf21835837 HWMP rolled to "initial position"
Kirill Andreev <andreev@iitp.ru>
parents: 4883
diff changeset
  1144
} //namespace dot11s
5130
b5062e8e0da1 Fixed coding style
Kirill Andreev <andreev@iitp.ru>
parents: 5129
diff changeset
  1145
} //namespace ns3