src/routing/aodv/aodv-routing-protocol.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 25 Aug 2010 21:31:43 +0200
changeset 7044 f94b264549d1
parent 7040 444bb5c76bff
permissions -rw-r--r--
introduce implicit conversion operator
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     2
/*
5591
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5590
diff changeset
     3
 * Copyright (c) 2009 IITP RAS
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     4
 *
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     8
 *
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    12
 * GNU General Public License for more details.
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    13
 *
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    17
 *
5591
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5590
diff changeset
    18
 * Based on 
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5590
diff changeset
    19
 *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5590
diff changeset
    20
 *      tuned by Samir Das and Mahesh Marina, University of Cincinnati;
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5590
diff changeset
    21
 * 
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5590
diff changeset
    22
 *      AODV-UU implementation by Erik Nordström of Uppsala University
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5590
diff changeset
    23
 *      http://core.it.uu.se/core/index.php/AODV-UU
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    24
 *
5722
fe27b38e0655 [aodv] Rename Elena
Pavel Boyko <boyko@iitp.ru>
parents: 5721
diff changeset
    25
 * Authors: Elena Buchatskaia <borovkovaes@iitp.ru>
5591
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5590
diff changeset
    26
 *          Pavel Boyko <boyko@iitp.ru>
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    27
 */
6465
7093d147b451 Improve logging for AODV
Tom Henderson <tomh@tomh.org>
parents: 6354
diff changeset
    28
#define NS_LOG_APPEND_CONTEXT                                   \
7093d147b451 Improve logging for AODV
Tom Henderson <tomh@tomh.org>
parents: 6354
diff changeset
    29
  if (m_ipv4) { std::clog << "[node " << m_ipv4->GetObject<Node> ()->GetId () << "] "; } 
7093d147b451 Improve logging for AODV
Tom Henderson <tomh@tomh.org>
parents: 6354
diff changeset
    30
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    31
#include "aodv-routing-protocol.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    32
#include "ns3/log.h"
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5856
diff changeset
    33
#include "ns3/boolean.h"
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    34
#include "ns3/random-variable.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    35
#include "ns3/inet-socket-address.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    36
#include "ns3/trace-source-accessor.h"
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
    37
#include "ns3/udp-socket-factory.h"
5681
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
    38
#include "ns3/wifi-net-device.h"
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
    39
#include "ns3/adhoc-wifi-mac.h"
5622
aa34a270824c route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5621
diff changeset
    40
#include <algorithm>
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    41
#include <limits>
5613
c2e4bad4affc Raw socket nearly work
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5612
diff changeset
    42
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    43
NS_LOG_COMPONENT_DEFINE ("AodvRoutingProtocol");
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    44
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    45
namespace ns3
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    46
{
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    47
namespace aodv
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    48
{
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    49
NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol);
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    50
5647
b5e2bb381517 #define AODV_PORT killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5645
diff changeset
    51
/// UDP Port for AODV control traffic
b5e2bb381517 #define AODV_PORT killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5645
diff changeset
    52
const uint32_t RoutingProtocol::AODV_PORT = 654;
5606
e6248d1eea81 handle active neighbors added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5605
diff changeset
    53
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    54
//-----------------------------------------------------------------------------
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    55
/// Tag used by AODV implementation
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    56
struct DeferredRouteOutputTag : public Tag
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    57
{
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    58
  /// Positive if output device is fixed in RouteOutput
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    59
  int32_t oif;
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    60
  
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    61
  DeferredRouteOutputTag (int32_t o = -1) : Tag(), oif (o) {}
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    62
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    63
  static TypeId GetTypeId ()
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    64
  {
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    65
    static TypeId tid = TypeId ("ns3::aodv::DeferredRouteOutputTag").SetParent<Tag> ();
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    66
    return tid;
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    67
  }
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    68
  
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    69
  TypeId  GetInstanceTypeId () const 
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    70
  {
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    71
    return GetTypeId ();
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    72
  }
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    73
  
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    74
  uint32_t GetSerializedSize () const
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    75
  {
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    76
    return sizeof(int32_t);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    77
  }
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    78
  
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    79
  void  Serialize (TagBuffer i) const
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    80
  {
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    81
    i.WriteU32 (oif);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    82
  }
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    83
  
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    84
  void  Deserialize (TagBuffer i)
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    85
  {
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    86
    oif = i.ReadU32 ();
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    87
  }
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    88
  
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    89
  void  Print (std::ostream &os) const
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    90
  {
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    91
    os << "DeferredRouteOutputTag: output interface = " << oif;
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    92
  }
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    93
};
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    94
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
    95
//-----------------------------------------------------------------------------
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
    96
RoutingProtocol::RoutingProtocol () :
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    97
  RreqRetries (2),
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
    98
  RreqRateLimit (10),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    99
  ActiveRouteTimeout (Seconds (3)),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   100
  NetDiameter (35),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   101
  NodeTraversalTime (MilliSeconds (40)),
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   102
  NetTraversalTime (2 * NetDiameter * NodeTraversalTime),
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   103
  PathDiscoveryTime ( 2 * NetTraversalTime),
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   104
  MyRouteTimeout (2 * std::max (PathDiscoveryTime, ActiveRouteTimeout)),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   105
  HelloInterval(Seconds (1)),
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   106
  AllowedHelloLoss (2),
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   107
  DeletePeriod (5 * std::max(ActiveRouteTimeout, HelloInterval)),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   108
  NextHopWait (NodeTraversalTime + MilliSeconds (10)),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   109
  TimeoutBuffer (2),
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   110
  BlackListTimeout(RreqRetries * NetTraversalTime),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   111
  MaxQueueLen (64),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   112
  MaxQueueTime (Seconds(30)),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   113
  DestinationOnly (false),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   114
  GratuitousReply (true),
5658
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
   115
  EnableHello (true),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   116
  m_routingTable (DeletePeriod),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   117
  m_queue (MaxQueueLen, MaxQueueTime),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   118
  m_requestId (0),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   119
  m_seqNo (0),
5717
4c67658e54af dpd added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5711
diff changeset
   120
  m_rreqIdCache (PathDiscoveryTime),
4c67658e54af dpd added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5711
diff changeset
   121
  m_dpd (PathDiscoveryTime),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   122
  m_nb(HelloInterval),
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   123
  m_rreqCount (0),
5720
92594e167a58 [aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents: 5719
diff changeset
   124
  m_htimer (Timer::CANCEL_ON_DESTROY),
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   125
  m_rreqRateLimitTimer (Timer::CANCEL_ON_DESTROY)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   126
{
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   127
  if (EnableHello)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   128
    {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   129
      m_nb.SetCallback (MakeCallback (&RoutingProtocol::SendRerrWhenBreaksLinkToNextHop, this));
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   130
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   131
}
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   132
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   133
TypeId
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   134
RoutingProtocol::GetTypeId (void)
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   135
{
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   136
  static TypeId tid = TypeId ("ns3::aodv::RoutingProtocol")
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   137
      .SetParent<Ipv4RoutingProtocol> ()
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   138
      .AddConstructor<RoutingProtocol> ()
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   139
      .AddAttribute ("HelloInterval", "HELLO messages emission interval.",
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   140
                     TimeValue (Seconds (1)),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   141
                     MakeTimeAccessor (&RoutingProtocol::HelloInterval),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   142
                     MakeTimeChecker ())
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   143
      .AddAttribute ("RreqRetries", "Maximum number of retransmissions of RREQ to discover a route",
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   144
                     UintegerValue (2),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   145
                     MakeUintegerAccessor (&RoutingProtocol::RreqRetries),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   146
                     MakeUintegerChecker<uint32_t> ())
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   147
      .AddAttribute ("RreqRateLimit", "Maximum number of RREQ per second.",
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   148
                     UintegerValue (10),
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   149
                     MakeUintegerAccessor (&RoutingProtocol::RreqRateLimit),
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   150
                     MakeUintegerChecker<uint32_t> ())
5625
022e4ebc7afd AODV cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5624
diff changeset
   151
      .AddAttribute ("NodeTraversalTime", "Conservative estimate of the average one hop traversal time for packets and should include "
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   152
                     "queuing delays, interrupt processing times and transfer times.",
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   153
                     TimeValue (MilliSeconds (40)),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   154
                     MakeTimeAccessor (&RoutingProtocol::NodeTraversalTime),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   155
                     MakeTimeChecker ())
5701
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   156
      .AddAttribute ("NextHopWait", "Period of our waiting for the neighbour's RREP_ACK = 10 ms + NodeTraversalTime",
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   157
                     TimeValue (MilliSeconds (50)),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   158
                     MakeTimeAccessor (&RoutingProtocol::NextHopWait),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   159
                     MakeTimeChecker ())
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   160
      .AddAttribute ("ActiveRouteTimeout", "Period of time during which the route is considered to be valid",
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   161
                     TimeValue (Seconds (3)),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   162
                     MakeTimeAccessor (&RoutingProtocol::ActiveRouteTimeout),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   163
                     MakeTimeChecker ())
5701
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   164
      .AddAttribute ("MyRouteTimeout", "Value of lifetime field in RREP generating by this node = 2 * max(ActiveRouteTimeout, PathDiscoveryTime)",
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   165
                     TimeValue (Seconds (11.2)),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   166
                     MakeTimeAccessor (&RoutingProtocol::MyRouteTimeout),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   167
                     MakeTimeChecker ())
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   168
      .AddAttribute ("BlackListTimeout", "Time for which the node is put into the blacklist = RreqRetries * NetTraversalTime",
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   169
                     TimeValue (Seconds (5.6)),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   170
                     MakeTimeAccessor (&RoutingProtocol::BlackListTimeout),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   171
                     MakeTimeChecker ())
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   172
      .AddAttribute ("DeletePeriod", "DeletePeriod is intended to provide an upper bound on the time for which an upstream node A "
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   173
                     "can have a neighbor B as an active next hop for destination D, while B has invalidated the route to D."
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   174
                     " = 5 * max (HelloInterval, ActiveRouteTimeout)",
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   175
                     TimeValue (Seconds (15)),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   176
                     MakeTimeAccessor (&RoutingProtocol::DeletePeriod),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   177
                     MakeTimeChecker ())
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   178
      .AddAttribute ("TimeoutBuffer", "Its purpose is to provide a buffer for the timeout so that if the RREP is delayed"
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   179
                     " due to congestion, a timeout is less likely to occur while the RREP is still en route back to the source.",
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   180
                     UintegerValue (2),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   181
                     MakeUintegerAccessor (&RoutingProtocol::TimeoutBuffer),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   182
                     MakeUintegerChecker<uint16_t> ())
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   183
      .AddAttribute ("NetDiameter", "Net diameter measures the maximum possible number of hops between two nodes in the network",
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   184
                     UintegerValue (35),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   185
                     MakeUintegerAccessor (&RoutingProtocol::NetDiameter),
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   186
                     MakeUintegerChecker<uint32_t> ())
5701
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   187
      .AddAttribute ("NetTraversalTime", "Estimate of the average net traversal time = 2 * NodeTraversalTime * NetDiameter",
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   188
                     TimeValue (Seconds (2.8)),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   189
                     MakeTimeAccessor (&RoutingProtocol::NetTraversalTime),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   190
                     MakeTimeChecker ())
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   191
      .AddAttribute ("PathDiscoveryTime", "Estimate of maximum time needed to find route in network = 2 * NetTraversalTime",
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   192
                     TimeValue (Seconds (5.6)),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   193
                     MakeTimeAccessor (&RoutingProtocol::PathDiscoveryTime),
5bf77106e095 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5700
diff changeset
   194
                     MakeTimeChecker ())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   195
      .AddAttribute ("MaxQueueLen", "Maximum number of packets that we allow a routing protocol to buffer.",
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   196
                     UintegerValue (64),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   197
                     MakeUintegerAccessor (&RoutingProtocol::MaxQueueLen),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   198
                     MakeUintegerChecker<uint32_t> ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   199
      .AddAttribute ("MaxQueueTime", "Maximum time packets can be queued (in seconds)",
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   200
                     TimeValue (Seconds (30)),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   201
                     MakeTimeAccessor (&RoutingProtocol::MaxQueueTime),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   202
                     MakeTimeChecker ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   203
      .AddAttribute ("AllowedHelloLoss", "Number of hello messages which may be loss for valid link.",
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   204
                     UintegerValue (2),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   205
                     MakeUintegerAccessor (&RoutingProtocol::AllowedHelloLoss),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   206
                     MakeUintegerChecker<uint16_t> ())
5654
afab4fbeb34e comments added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5653
diff changeset
   207
      .AddAttribute ("GratuitousReply", "Indicates whether a gratuitous RREP should be unicast to the node originated route discovery.",
5634
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   208
                     BooleanValue (true),
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   209
                     MakeBooleanAccessor (&RoutingProtocol::SetGratuitousReplyFlag,
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   210
                                          &RoutingProtocol::GetGratuitousReplyFlag),
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   211
                     MakeBooleanChecker ())
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   212
      .AddAttribute ("DestinationOnly", "Indicates only the destination may respond to this RREQ.",
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   213
                     BooleanValue (false),
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   214
                     MakeBooleanAccessor (&RoutingProtocol::SetDesinationOnlyFlag,
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   215
                                          &RoutingProtocol::GetDesinationOnlyFlag),
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   216
                     MakeBooleanChecker ())
5654
afab4fbeb34e comments added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5653
diff changeset
   217
      .AddAttribute ("EnableHello", "Indicates whether a hello messages enable.",
5658
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
   218
                     BooleanValue (true),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   219
                     MakeBooleanAccessor (&RoutingProtocol::SetHelloEnable,
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   220
                                          &RoutingProtocol::GetHelloEnable),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   221
                     MakeBooleanChecker ())
5717
4c67658e54af dpd added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5711
diff changeset
   222
      .AddAttribute ("EnableBroadcast", "Indicates whether a broadcast data packets forwarding enable.",
4c67658e54af dpd added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5711
diff changeset
   223
                     BooleanValue (true),
4c67658e54af dpd added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5711
diff changeset
   224
                     MakeBooleanAccessor (&RoutingProtocol::SetBroadcastEnable,
4c67658e54af dpd added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5711
diff changeset
   225
                                          &RoutingProtocol::GetBroadcastEnable),
4c67658e54af dpd added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5711
diff changeset
   226
                     MakeBooleanChecker ())
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   227
  ;
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   228
  return tid;
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   229
}
5674
09956138025a cosmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5673
diff changeset
   230
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   231
RoutingProtocol::~RoutingProtocol ()
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   232
{
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   233
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   234
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   235
void
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   236
RoutingProtocol::DoDispose ()
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   237
{
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   238
  m_ipv4 = 0;
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   239
  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::iterator iter =
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   240
      m_socketAddresses.begin (); iter != m_socketAddresses.end (); iter++)
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   241
    {
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   242
      iter->first->Close ();
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   243
    }
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   244
  m_socketAddresses.clear ();
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   245
  Ipv4RoutingProtocol::DoDispose ();
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   246
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   247
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   248
void
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   249
RoutingProtocol::Start ()
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   250
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
   251
  NS_LOG_FUNCTION (this);
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   252
  if (EnableHello)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   253
    {
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   254
      m_nb.ScheduleTimer ();
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   255
    }
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   256
  m_rreqRateLimitTimer.SetFunction (&RoutingProtocol::RreqRateLimitTimerExpire,
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   257
      this);
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   258
  m_rreqRateLimitTimer.Schedule (Seconds (1));
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   259
}
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   260
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   261
Ptr<Ipv4Route>
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   262
RoutingProtocol::RouteOutput (Ptr<Packet> p, const Ipv4Header &header,
5856
7fd20c798a7d bug 742: Implementation of SO_BINDTODEVICE
Antti Mäkelä <zarhan@cc.hut.fi>
parents: 5843
diff changeset
   263
    Ptr<NetDevice> oif, Socket::SocketErrno &sockerr)
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   264
{
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   265
  NS_LOG_FUNCTION (this << header << (oif? oif->GetIfIndex () : 0));
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   266
  if (! p)
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   267
    {
6547
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   268
      return LoopbackRoute (header, oif); // later
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   269
    }
5667
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   270
  if (m_socketAddresses.empty ())
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   271
    {
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   272
      sockerr = Socket::ERROR_NOROUTETOHOST;
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   273
      NS_LOG_LOGIC ("No aodv interfaces");
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   274
      Ptr<Ipv4Route> route;
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   275
      return route;
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   276
    }
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   277
  sockerr = Socket::ERROR_NOTERROR;
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   278
  Ptr<Ipv4Route> route;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   279
  Ipv4Address dst = header.GetDestination ();
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
   280
  RoutingTableEntry rt;
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   281
  if (m_routingTable.LookupValidRoute (dst, rt))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   282
    {
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   283
      route = rt.GetRoute ();
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   284
      NS_ASSERT (route != 0);
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   285
      NS_LOG_DEBUG ("Exist route to " << route->GetDestination() << " from interface " << route->GetSource());
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   286
      if (oif != 0 && route->GetOutputDevice () != oif)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   287
        {
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   288
          NS_LOG_DEBUG ("Output device doesn't match. Dropped.");
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   289
          sockerr = Socket::ERROR_NOROUTETOHOST;
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   290
          return Ptr<Ipv4Route> ();
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   291
        }
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   292
      UpdateRouteLifeTime (dst, ActiveRouteTimeout);
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   293
      UpdateRouteLifeTime (route->GetGateway (), ActiveRouteTimeout);
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   294
      return route;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   295
    }
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   296
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   297
  // Valid route not found, in this case we return loopback. 
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   298
  // Actual route request will be deferred until packet will be fully formed, 
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   299
  // routed to loopback, received from loopback and passed to RouteInput (see below)
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   300
  uint32_t iif = (oif ? m_ipv4->GetInterfaceForDevice (oif) : -1);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   301
  DeferredRouteOutputTag tag (iif);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   302
  if (! p->PeekPacketTag (tag))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   303
    {
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   304
      p->AddPacketTag (tag);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   305
    }
6547
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   306
  return LoopbackRoute (header, oif);
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   307
}
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   308
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   309
void
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   310
RoutingProtocol::DeferredRouteOutput (Ptr<const Packet> p, const Ipv4Header & header, 
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   311
    UnicastForwardCallback ucb, ErrorCallback ecb)
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   312
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
   313
  NS_LOG_FUNCTION (this << p << header);
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   314
  NS_ASSERT (p != 0 && p != Ptr<Packet> ());
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   315
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   316
  QueueEntry newEntry (p, header, ucb, ecb);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   317
  bool result = m_queue.Enqueue (newEntry);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   318
  if (result)
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   319
    {
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   320
      NS_LOG_LOGIC ("Add packet " << p->GetUid() << " to queue. Protocol " << (uint16_t) header.GetProtocol ());
6483
5dbb70a41b85 Bug 966 - AODV originates new RREQ on each packet, when doesn't have valid route
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6465
diff changeset
   321
      RoutingTableEntry rt;
5dbb70a41b85 Bug 966 - AODV originates new RREQ on each packet, when doesn't have valid route
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6465
diff changeset
   322
      bool result = m_routingTable.LookupRoute(header.GetDestination (), rt);
5dbb70a41b85 Bug 966 - AODV originates new RREQ on each packet, when doesn't have valid route
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6465
diff changeset
   323
      if(!result || ((rt.GetFlag() != IN_SEARCH) && result))
5dbb70a41b85 Bug 966 - AODV originates new RREQ on each packet, when doesn't have valid route
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6465
diff changeset
   324
        {
5dbb70a41b85 Bug 966 - AODV originates new RREQ on each packet, when doesn't have valid route
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6465
diff changeset
   325
          NS_LOG_LOGIC ("Send RREQ to" <<header.GetDestination ());
5dbb70a41b85 Bug 966 - AODV originates new RREQ on each packet, when doesn't have valid route
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6465
diff changeset
   326
          SendRequest (header.GetDestination ());
5dbb70a41b85 Bug 966 - AODV originates new RREQ on each packet, when doesn't have valid route
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6465
diff changeset
   327
        }
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   328
    }
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   329
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   330
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   331
bool
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   332
RoutingProtocol::RouteInput (Ptr<const Packet> p, const Ipv4Header &header,
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   333
    Ptr<const NetDevice> idev, UnicastForwardCallback ucb,
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   334
    MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb)
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   335
{
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   336
  NS_LOG_FUNCTION (this << p->GetUid() << header.GetDestination() << idev->GetAddress());
5667
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   337
  if (m_socketAddresses.empty ())
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   338
    {
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   339
      NS_LOG_LOGIC ("No aodv interfaces");
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   340
      return false;
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   341
    }
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   342
  NS_ASSERT (m_ipv4 != 0);
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   343
  NS_ASSERT (p != 0);
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   344
  // Check if input device supports IP
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   345
  NS_ASSERT (m_ipv4->GetInterfaceForDevice (idev) >= 0);
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   346
  int32_t iif = m_ipv4->GetInterfaceForDevice (idev);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   347
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   348
  Ipv4Address dst = header.GetDestination ();
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   349
  Ipv4Address origin = header.GetSource ();
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   350
  
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   351
  // Deferred route request
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   352
  if (idev == m_lo)
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   353
    {
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   354
      DeferredRouteOutputTag tag;
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   355
      if (p->PeekPacketTag (tag))
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   356
        {
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   357
          DeferredRouteOutput (p, header, ucb, ecb);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   358
          return true;
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   359
        }
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   360
    }
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   361
  
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   362
  // Duplicate of own packet
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   363
  if (IsMyOwnAddress (origin))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   364
    return true;
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   365
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   366
  // Broadcast local delivery/forwarding
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   367
  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j =
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   368
      m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   369
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   370
      Ipv4InterfaceAddress iface = j->second;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   371
      if (m_ipv4->GetInterfaceForAddress (iface.GetLocal ()) == iif)
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   372
        if (dst == iface.GetBroadcast () || dst.IsBroadcast ())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   373
          {
5721
408712df1963 [aodv] DPD cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5720
diff changeset
   374
            if (m_dpd.IsDuplicate (p, header))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   375
              {
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   376
                NS_LOG_DEBUG ("Duplicated packet " << p->GetUid () << " from " << origin << ". Drop.");
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   377
                return true;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   378
              }
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   379
            UpdateRouteLifeTime (origin, ActiveRouteTimeout);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   380
            NS_LOG_LOGIC ("Broadcast local delivery to " << iface.GetLocal ());
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   381
            Ptr<Packet> packet = p->Copy ();
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   382
            lcb (p, header, iif);
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   383
            if (!EnableBroadcast)
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   384
              {
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   385
                return true;
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   386
              }
5690
22dd676f5986 merge + Ip routing protocol reverted
Pavel Boyko <boyko@iitp.ru>
parents: 5689 5688
diff changeset
   387
            if (header.GetTtl () > 1)
5689
56aac7757f06 bcast forwarding seems to be fixed
Pavel Boyko <boyko@iitp.ru>
parents: 5687
diff changeset
   388
              {
5694
a1da0ba7d1a8 broadcast UDP traffic in aodv script
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5692
diff changeset
   389
                NS_LOG_LOGIC ("Forward broadcast. TTL " << (uint16_t) header.GetTtl ());
5697
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
   390
                RoutingTableEntry toBroadcast;
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
   391
                if (m_routingTable.LookupRoute (dst, toBroadcast))
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
   392
                  {
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
   393
                    Ptr<Ipv4Route> route = toBroadcast.GetRoute ();
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
   394
                    ucb (route, packet, header);
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
   395
                  }
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
   396
                else
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
   397
                  {
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
   398
                    NS_LOG_DEBUG ("No route to forward broadcast. Drop packet " << p->GetUid ());
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
   399
                  }
5689
56aac7757f06 bcast forwarding seems to be fixed
Pavel Boyko <boyko@iitp.ru>
parents: 5687
diff changeset
   400
              }
5692
4cc0291326c6 udp traffic added into aodv script + problem with remove fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5690
diff changeset
   401
            else
4cc0291326c6 udp traffic added into aodv script + problem with remove fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5690
diff changeset
   402
              {
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   403
                NS_LOG_DEBUG ("TTL exceeded. Drop packet " << p->GetUid ());
5692
4cc0291326c6 udp traffic added into aodv script + problem with remove fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5690
diff changeset
   404
              }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   405
            return true;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   406
          }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   407
    }
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   408
  
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   409
  // Unicast local delivery
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   410
  if (m_ipv4->IsDestinationAddress (dst, iif))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   411
    {
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   412
      UpdateRouteLifeTime (origin, ActiveRouteTimeout);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   413
      RoutingTableEntry toOrigin;
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
   414
      if (m_routingTable.LookupValidRoute (origin, toOrigin))
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   415
        {
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   416
          UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   417
          m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout);
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   418
        }
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   419
      NS_LOG_LOGIC ("Unicast local delivery to " << dst);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   420
      lcb (p, header, iif);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   421
      return true;
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   422
    }
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   423
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   424
  // Forwarding
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   425
  return Forwarding (p, header, ucb, ecb);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   426
}
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   427
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   428
bool
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   429
RoutingProtocol::Forwarding (Ptr<const Packet> p, const Ipv4Header & header,
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   430
    UnicastForwardCallback ucb, ErrorCallback ecb)
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   431
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
   432
  NS_LOG_FUNCTION (this);
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   433
  Ipv4Address dst = header.GetDestination ();
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   434
  Ipv4Address origin = header.GetSource ();
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   435
  m_routingTable.Purge ();
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   436
  RoutingTableEntry toDst;
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   437
  if (m_routingTable.LookupRoute (dst, toDst))
5622
aa34a270824c route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5621
diff changeset
   438
    {
5676
f192724759f0 local repair killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5675
diff changeset
   439
      if (toDst.GetFlag () == VALID)
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   440
        {
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   441
          Ptr<Ipv4Route> route = toDst.GetRoute ();
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   442
          NS_LOG_LOGIC (route->GetSource()<<" forwarding to " << dst << " from " << origin << " packet " << p->GetUid ());
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
   443
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   444
          /*
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   445
           *  Each time a route is used to forward a data packet, its Active Route
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   446
           *  Lifetime field of the source, destination and the next hop on the
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   447
           *  path to the destination is updated to be no less than the current
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   448
           *  time plus ActiveRouteTimeout.
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   449
           */
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   450
          UpdateRouteLifeTime (origin, ActiveRouteTimeout);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   451
          UpdateRouteLifeTime (dst, ActiveRouteTimeout);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   452
          UpdateRouteLifeTime (route->GetGateway (), ActiveRouteTimeout);
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   453
          /*
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   454
           *  Since the route between each originator and destination pair is expected to be symmetric, the
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   455
           *  Active Route Lifetime for the previous hop, along the reverse path back to the IP source, is also updated
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   456
           *  to be no less than the current time plus ActiveRouteTimeout
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   457
           */
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   458
          RoutingTableEntry toOrigin;
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   459
          m_routingTable.LookupRoute (origin, toOrigin);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   460
          UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout);
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
   461
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   462
          m_nb.Update (route->GetGateway (), ActiveRouteTimeout);
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   463
          m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout);
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   464
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   465
          ucb (route, p, header);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   466
          return true;
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   467
        }
5672
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
   468
      else
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
   469
        {
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
   470
          if (toDst.GetValidSeqNo ())
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
   471
            {
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
   472
              SendRerrWhenNoRouteToForward (dst, toDst.GetSeqNo (), origin);
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   473
              NS_LOG_DEBUG ("Drop packet " << p->GetUid () << " because no route to forward it.");
5672
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
   474
              return false;
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
   475
            }
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
   476
        }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   477
    }
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   478
  NS_LOG_LOGIC ("route not found to "<< dst << ". Send RERR message.");
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   479
  NS_LOG_DEBUG ("Drop packet " << p->GetUid () << " because no route to forward it.");
5672
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
   480
  SendRerrWhenNoRouteToForward (dst, 0, origin);
5578
020a5aa8b40c SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5577
diff changeset
   481
  return false;
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   482
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   483
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   484
void
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   485
RoutingProtocol::SetIpv4 (Ptr<Ipv4> ipv4)
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   486
{
5616
9d22b787ea7c RawSocketImpl::ForwardUp fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5615
diff changeset
   487
  NS_ASSERT (ipv4 != 0);
9d22b787ea7c RawSocketImpl::ForwardUp fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5615
diff changeset
   488
  NS_ASSERT (m_ipv4 == 0);
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   489
  
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   490
  if (EnableHello)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   491
    {
5720
92594e167a58 [aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents: 5719
diff changeset
   492
      m_htimer.SetFunction (&RoutingProtocol::HelloTimerExpire, this);
92594e167a58 [aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents: 5719
diff changeset
   493
      m_htimer.Schedule (MilliSeconds (UniformVariable ().GetInteger (0, 100)));
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   494
    }
5571
b82fbde6cf8d BroadcastIdCache methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5562
diff changeset
   495
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   496
  m_ipv4 = ipv4;
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   497
  
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   498
  // Create lo route. It is asserted that the only one interface up for now is loopback
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   499
  NS_ASSERT (m_ipv4->GetNInterfaces () == 1 && m_ipv4->GetAddress (0, 0).GetLocal () == Ipv4Address ("127.0.0.1"));
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   500
  m_lo = m_ipv4->GetNetDevice (0);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   501
  NS_ASSERT (m_lo != 0);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   502
  // Remember lo route
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   503
  RoutingTableEntry rt (/*device=*/m_lo, /*dst=*/Ipv4Address::GetLoopback (), /*know seqno=*/true, /*seqno=*/0, 
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   504
                        /*iface=*/Ipv4InterfaceAddress (Ipv4Address::GetLoopback (), Ipv4Mask ("255.0.0.0")),
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   505
                        /*hops=*/1, /*next hop=*/Ipv4Address::GetLoopback (), 
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   506
                        /*lifetime=*/Simulator::GetMaximumSimulationTime ());
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   507
  m_routingTable.AddRoute (rt);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   508
  
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   509
  Simulator::ScheduleNow (&RoutingProtocol::Start, this);
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   510
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   511
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   512
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   513
RoutingProtocol::NotifyInterfaceUp (uint32_t i)
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   514
{
5669
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   515
  NS_LOG_FUNCTION (this << m_ipv4->GetAddress (i, 0).GetLocal ());
5668
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   516
  Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> ();
5700
7c93ecc5a430 use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5699
diff changeset
   517
  if (l3->GetNAddresses (i) > 1)
5668
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   518
    {
5729
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
   519
      NS_LOG_WARN ("AODV does not work with more then one address per each interface.");
5668
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   520
    }
5700
7c93ecc5a430 use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5699
diff changeset
   521
  Ipv4InterfaceAddress iface = l3->GetAddress (i, 0);
5666
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   522
  if (iface.GetLocal () == Ipv4Address ("127.0.0.1"))
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   523
    return;
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   524
 
5666
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   525
  // Create a socket to listen only on this interface
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   526
  Ptr<Socket> socket = Socket::CreateSocket (GetObject<Node> (),
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   527
      UdpSocketFactory::GetTypeId ());
5666
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   528
  NS_ASSERT (socket != 0);
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   529
  socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv, this));
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   530
  socket->BindToNetDevice (l3->GetNetDevice (i));
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   531
  socket->Bind (InetSocketAddress (Ipv4Address::GetAny (), AODV_PORT));
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   532
  socket->SetAllowBroadcast (true);
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   533
  socket->SetAttribute ("IpTtl", UintegerValue (1));
5666
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   534
  m_socketAddresses.insert (std::make_pair (socket, iface));
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   535
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   536
  // Add local broadcast record to the routing table
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   537
  Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (iface.GetLocal ()));
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   538
  RoutingTableEntry rt (/*device=*/dev, /*dst=*/iface.GetBroadcast (), /*know seqno=*/true, /*seqno=*/0, /*iface=*/iface,
5711
4bdbf97344a9 code cleanup
Pavel Boyko <boyko@iitp.ru>
parents: 5708
diff changeset
   539
                        /*hops=*/1, /*next hop=*/iface.GetBroadcast (), /*lifetime=*/Simulator::GetMaximumSimulationTime ());
5666
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   540
  m_routingTable.AddRoute (rt);
5681
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   541
  
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   542
  // Allow neighbor manager use this interface for layer 2 feedback if possible
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   543
  Ptr<WifiNetDevice> wifi = dev->GetObject<WifiNetDevice> ();
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   544
  if (wifi == 0)
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   545
    return;
5735
0d93fe37cdf5 [aodv] Cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5730
diff changeset
   546
  Ptr<WifiMac> mac = wifi->GetMac ();
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   547
  if (mac == 0)
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   548
    return;
5681
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   549
  
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   550
  mac->TraceConnectWithoutContext ("TxErrHeader", m_nb.GetTxErrorCallback ());
5700
7c93ecc5a430 use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5699
diff changeset
   551
  m_nb.AddArpCache (l3->GetInterface (i)->GetArpCache ());
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   552
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   553
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   554
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   555
RoutingProtocol::NotifyInterfaceDown (uint32_t i)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   556
{
5569
0b63a5534a66 AODV logs
Pavel Boyko <boyko@iitp.ru>
parents: 5562
diff changeset
   557
  NS_LOG_FUNCTION (this << m_ipv4->GetAddress (i, 0).GetLocal ());
5681
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   558
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   559
  // Disable layer 2 link state monitoring (if possible)
5681
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   560
  Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> ();
5700
7c93ecc5a430 use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5699
diff changeset
   561
  Ptr<NetDevice> dev = l3->GetNetDevice (i);
5681
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   562
  Ptr<WifiNetDevice> wifi = dev->GetObject<WifiNetDevice> ();
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   563
  if (wifi != 0)
5681
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   564
    {
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   565
      Ptr<WifiMac> mac = wifi->GetMac ()->GetObject<AdhocWifiMac> ();
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   566
      if (mac != 0)
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   567
        {
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   568
          mac->TraceDisconnectWithoutContext ("TxErrHeader",
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   569
              m_nb.GetTxErrorCallback ());
5700
7c93ecc5a430 use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5699
diff changeset
   570
          m_nb.DelArpCache (l3->GetInterface (i)->GetArpCache ());
5681
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   571
        }
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   572
    }
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   573
  
795c049199c5 Includes cleanup + layer 2 link failure detection (untested)
Pavel Boyko <boyko@iitp.ru>
parents: 5677
diff changeset
   574
  // Close socket 
5667
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   575
  Ptr<Socket> socket = FindSocketWithInterfaceAddress (m_ipv4->GetAddress (i, 0));
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   576
  NS_ASSERT (socket);
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   577
  socket->Close ();
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   578
  m_socketAddresses.erase (socket);
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   579
  if (m_socketAddresses.empty ())
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   580
    {
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   581
      NS_LOG_LOGIC ("No aodv interfaces");
5720
92594e167a58 [aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents: 5719
diff changeset
   582
      m_htimer.Cancel ();
5667
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   583
      m_nb.Clear ();
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   584
      m_routingTable.Clear ();
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   585
      return;
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   586
    }
2a81f8bf0199 RoutingProtocol::NotifyInterfaceDown added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5666
diff changeset
   587
  m_routingTable.DeleteAllRoutesFromInterface (m_ipv4->GetAddress (i, 0));
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   588
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   589
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   590
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   591
RoutingProtocol::NotifyAddAddress (uint32_t i, Ipv4InterfaceAddress address)
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   592
{
5669
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   593
  NS_LOG_FUNCTION (this << " interface " << i << " address " << address);
5668
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   594
  Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> ();
5700
7c93ecc5a430 use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5699
diff changeset
   595
  if (!l3->IsUp (i))
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   596
    return;
5700
7c93ecc5a430 use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5699
diff changeset
   597
  if (l3->GetNAddresses (i) == 1)
5668
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   598
    {
5700
7c93ecc5a430 use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5699
diff changeset
   599
      Ipv4InterfaceAddress iface = l3->GetAddress (i, 0);
5668
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   600
      Ptr<Socket> socket = FindSocketWithInterfaceAddress (iface);
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   601
      if (!socket)
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   602
        {
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   603
          if (iface.GetLocal () == Ipv4Address ("127.0.0.1"))
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   604
            return;
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   605
          // Create a socket to listen only on this interface
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   606
          Ptr<Socket> socket = Socket::CreateSocket (GetObject<Node> (),
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   607
              UdpSocketFactory::GetTypeId ());
5668
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   608
          NS_ASSERT (socket != 0);
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   609
          socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv,this));
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   610
          socket->BindToNetDevice (l3->GetNetDevice (i));
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   611
          // Bind to any IP address so that broadcasts can be received
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   612
          socket->Bind (InetSocketAddress (Ipv4Address::GetAny(), AODV_PORT));
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   613
          socket->SetAllowBroadcast (true);
5668
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   614
          m_socketAddresses.insert (std::make_pair (socket, iface));
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   615
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   616
          // Add local broadcast record to the routing table
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   617
          Ptr<NetDevice> dev = m_ipv4->GetNetDevice (
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   618
              m_ipv4->GetInterfaceForAddress (iface.GetLocal ()));
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   619
          RoutingTableEntry rt (/*device=*/dev, /*dst=*/iface.GetBroadcast (), /*know seqno=*/true,
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   620
                                /*seqno=*/0, /*iface=*/iface, /*hops=*/1,
5711
4bdbf97344a9 code cleanup
Pavel Boyko <boyko@iitp.ru>
parents: 5708
diff changeset
   621
                                /*next hop=*/iface.GetBroadcast (), /*lifetime=*/Simulator::GetMaximumSimulationTime ());
5668
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   622
          m_routingTable.AddRoute (rt);
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   623
        }
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   624
    }
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   625
  else
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   626
    {
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   627
      NS_LOG_LOGIC ("AODV does not work with more then one address per each interface. Ignore added address");
01d09aa60c45 RoutingProtocol::NotifyAddAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5667
diff changeset
   628
    }
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   629
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   630
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   631
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   632
RoutingProtocol::NotifyRemoveAddress (uint32_t i, Ipv4InterfaceAddress address)
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   633
{
5669
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   634
  NS_LOG_FUNCTION (this);
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   635
  Ptr<Socket> socket = FindSocketWithInterfaceAddress (address);
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   636
  if (socket)
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   637
    {
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   638
      m_routingTable.DeleteAllRoutesFromInterface (address);
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   639
      m_socketAddresses.erase (socket);
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   640
      Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> ();
5700
7c93ecc5a430 use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5699
diff changeset
   641
      if (l3->GetNAddresses (i))
5669
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   642
        {
5700
7c93ecc5a430 use Ipv4L3Protocol instead of Ptr<Ipv4Interface>
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5699
diff changeset
   643
          Ipv4InterfaceAddress iface = l3->GetAddress (i, 0);
5669
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   644
          // Create a socket to listen only on this interface
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   645
          Ptr<Socket> socket = Socket::CreateSocket (GetObject<Node> (),
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   646
              UdpSocketFactory::GetTypeId ());
5669
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   647
          NS_ASSERT (socket != 0);
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   648
          socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv, this));
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   649
          // Bind to any IP address so that broadcasts can be received
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   650
          socket->Bind (InetSocketAddress (Ipv4Address::GetAny(), AODV_PORT));
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   651
          socket->SetAllowBroadcast (true);
5669
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   652
          m_socketAddresses.insert (std::make_pair (socket, iface));
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   653
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   654
          // Add local broadcast record to the routing table
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   655
          Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (iface.GetLocal ()));
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   656
          RoutingTableEntry rt (/*device=*/dev, /*dst=*/iface.GetBroadcast (), /*know seqno=*/true, /*seqno=*/0, /*iface=*/iface,
5711
4bdbf97344a9 code cleanup
Pavel Boyko <boyko@iitp.ru>
parents: 5708
diff changeset
   657
                                /*hops=*/1, /*next hop=*/iface.GetBroadcast (), /*lifetime=*/Simulator::GetMaximumSimulationTime ());
5669
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   658
          m_routingTable.AddRoute (rt);
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   659
        }
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   660
      if (m_socketAddresses.empty ())
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   661
        {
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   662
          NS_LOG_LOGIC ("No aodv interfaces");
5720
92594e167a58 [aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents: 5719
diff changeset
   663
          m_htimer.Cancel ();
5669
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   664
          m_nb.Clear ();
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   665
          m_routingTable.Clear ();
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   666
          return;
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   667
        }
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   668
    }
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   669
  else
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   670
    {
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   671
      NS_LOG_LOGIC ("Remove address not participating in AODV operation");
cdacd9c46201 RoutingProtocol::NotifyRemoveAddress added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5668
diff changeset
   672
    }
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   673
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   674
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   675
bool
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   676
RoutingProtocol::IsMyOwnAddress (Ipv4Address src)
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   677
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
   678
  NS_LOG_FUNCTION (this << src);
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   679
  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j =
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   680
      m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   681
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   682
      Ipv4InterfaceAddress iface = j->second;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   683
      if (src == iface.GetLocal ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   684
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   685
          return true;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   686
        }
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   687
    }
5594
106389f6d383 Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents: 5593
diff changeset
   688
  return false;
106389f6d383 Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents: 5593
diff changeset
   689
}
106389f6d383 Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents: 5593
diff changeset
   690
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   691
Ptr<Ipv4Route> 
6547
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   692
RoutingProtocol::LoopbackRoute (const Ipv4Header & hdr, Ptr<NetDevice> oif) const
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   693
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
   694
  NS_LOG_FUNCTION (this << hdr);
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   695
  NS_ASSERT (m_lo != 0);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   696
  Ptr<Ipv4Route> rt = Create<Ipv4Route> ();
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   697
  rt->SetDestination (hdr.GetDestination ());
6547
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   698
  //
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   699
  // Source address selection here is tricky.  The loopback route is
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   700
  // returned when AODV does not have a route; this causes the packet
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   701
  // to be looped back and handled (cached) in RouteInput() method
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   702
  // while a route is found. However, connection-oriented protocols
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   703
  // like TCP need to create an endpoint four-tuple (src, src port,
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   704
  // dst, dst port) and create a pseudo-header for checksumming.  So,
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   705
  // AODV needs to guess correctly what the eventual source address
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   706
  // will be.
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   707
  //
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   708
  // For single interface, single address nodes, this is not a problem.
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   709
  // When there are possibly multiple outgoing interfaces, the policy
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   710
  // implemented here is to pick the first available AODV interface.
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   711
  // If RouteOutput() caller specified an outgoing interface, that 
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   712
  // further constrains the selection of source address
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   713
  //
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   714
  std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = m_socketAddresses.begin ();
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   715
  if (oif)
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   716
    {
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   717
      // Iterate to find an address on the oif device
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   718
      for (j = m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   719
        {
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   720
          Ipv4Address addr = j->second.GetLocal ();
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   721
          int32_t interface = m_ipv4->GetInterfaceForAddress (addr);
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   722
          if (oif == m_ipv4->GetNetDevice (static_cast<uint32_t> (interface)))
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   723
            {
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   724
              rt->SetSource (addr);
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   725
              break;
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   726
            }
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   727
        }
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   728
    }
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   729
  else
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   730
    {
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   731
      rt->SetSource (j->second.GetLocal ());
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   732
    }
6804b85fe140 Bug 879 - source address selection for AODV using DeferredRouteRequest
Tom Henderson <tomh@tomh.org>
parents: 6484
diff changeset
   733
  NS_ASSERT_MSG (rt->GetSource() != Ipv4Address (), "Valid AODV source address not found");
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   734
  rt->SetGateway (Ipv4Address ("127.0.0.1"));
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   735
  rt->SetOutputDevice (m_lo);
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   736
  return rt;
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   737
}
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
   738
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   739
void
5675
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   740
RoutingProtocol::SendRequest (Ipv4Address dst)
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   741
{
5614
e4ac62d42079 BuildHeader added + support of raw socket in ipv4-l3-protol added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5613
diff changeset
   742
  NS_LOG_FUNCTION ( this << dst);
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   743
  // A node SHOULD NOT originate more than RREQ_RATELIMIT RREQ messages per second.
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   744
  if (m_rreqCount == RreqRateLimit)
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   745
    {
5708
55abd6e61f17 MilliSeconds(double) fixed to MilliSeconds(int)
Pavel Boyko <boyko@iitp.ru>
parents: 5704
diff changeset
   746
      Simulator::Schedule (m_rreqRateLimitTimer.GetDelayLeft () + MicroSeconds (100),
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   747
          &RoutingProtocol::SendRequest, this, dst);
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   748
      return;
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   749
    }
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   750
  else
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   751
    m_rreqCount++;
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   752
  // Create RREQ header
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   753
  RreqHeader rreqHeader;
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   754
  rreqHeader.SetDst (dst);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   755
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   756
  RoutingTableEntry rt;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   757
  if (m_routingTable.LookupRoute (dst, rt))
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
   758
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   759
      rreqHeader.SetHopCount (rt.GetHop ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   760
      if (rt.GetValidSeqNo ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   761
        rreqHeader.SetDstSeqno (rt.GetSeqNo ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   762
      else
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   763
        rreqHeader.SetUnknownSeqno (true);
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   764
      rt.SetFlag (IN_SEARCH);
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
   765
      m_routingTable.AddRoute (rt);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   766
    }
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   767
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   768
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   769
      rreqHeader.SetUnknownSeqno (true);
5843
aa227ef4f60f AODV: fix strange routing record with destination 102.102.102.102, thank to Mariusz Skrocki.
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5749
diff changeset
   770
      Ptr<NetDevice> dev = 0;
aa227ef4f60f AODV: fix strange routing record with destination 102.102.102.102, thank to Mariusz Skrocki.
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5749
diff changeset
   771
      RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/dst, /*validSeqNo=*/false, /*seqno=*/0,
aa227ef4f60f AODV: fix strange routing record with destination 102.102.102.102, thank to Mariusz Skrocki.
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5749
diff changeset
   772
                                  /*iface=*/Ipv4InterfaceAddress(),/*hop=*/0,
aa227ef4f60f AODV: fix strange routing record with destination 102.102.102.102, thank to Mariusz Skrocki.
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5749
diff changeset
   773
                                  /*nextHop=*/Ipv4Address(), /*lifeTime=*/Seconds(0));
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   774
      newEntry.SetFlag (IN_SEARCH);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   775
      m_routingTable.AddRoute (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   776
    }
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   777
5634
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   778
  if (GratuitousReply)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   779
    rreqHeader.SetGratiousRrep (true);
5634
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   780
  if (DestinationOnly)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   781
    rreqHeader.SetDestinationOnly (true);
5601
82c874729b6c queue modified
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5600
diff changeset
   782
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5594
diff changeset
   783
  m_seqNo++;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   784
  rreqHeader.SetOriginSeqno (m_seqNo);
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   785
  m_requestId++;
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   786
  rreqHeader.SetId (m_requestId);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   787
  rreqHeader.SetHopCount (0);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   788
5625
022e4ebc7afd AODV cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5624
diff changeset
   789
  // Send RREQ as subnet directed broadcast from each interface used by aodv
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   790
  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j =
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   791
      m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   792
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   793
      Ptr<Socket> socket = j->first;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   794
      Ipv4InterfaceAddress iface = j->second;
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   795
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   796
      rreqHeader.SetOrigin (iface.GetLocal ());
5721
408712df1963 [aodv] DPD cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5720
diff changeset
   797
      m_rreqIdCache.IsDuplicate (iface.GetLocal (), m_requestId);
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   798
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   799
      Ptr<Packet> packet = Create<Packet> ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   800
      packet->AddHeader (rreqHeader);
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   801
      TypeHeader tHeader (AODVTYPE_RREQ);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   802
      packet->AddHeader (tHeader);
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   803
      // Send to all-hosts broadcast if on /32 addr, subnet-directed otherwise
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   804
      Ipv4Address destination;
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   805
      if (iface.GetMask () == Ipv4Mask::GetOnes ())
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   806
        {
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   807
          destination = Ipv4Address ("255.255.255.255");
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   808
        }
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   809
      else
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   810
        { 
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   811
          destination = iface.GetBroadcast ();
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   812
        }
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
   813
      socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   814
    }
5675
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   815
  ScheduleRreqRetry (dst);
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   816
  if (EnableHello)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   817
    {
5720
92594e167a58 [aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents: 5719
diff changeset
   818
      m_htimer.Cancel ();
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6547
diff changeset
   819
      int rng = UniformVariable ().GetInteger (0, 10);
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   820
      m_htimer.Schedule (HelloInterval - Time (0.01 * MilliSeconds (rng)));
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   821
    }
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   822
}
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   823
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   824
void
5675
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   825
RoutingProtocol::ScheduleRreqRetry (Ipv4Address dst)
5641
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   826
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
   827
  NS_LOG_FUNCTION (this << dst);
5641
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   828
  if (m_addressReqTimer.find (dst) == m_addressReqTimer.end ())
5675
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   829
    {
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   830
      Timer timer (Timer::CANCEL_ON_DESTROY);
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   831
      m_addressReqTimer[dst] = timer;
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   832
    }
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   833
  m_addressReqTimer[dst].SetFunction (&RoutingProtocol::RouteRequestTimerExpire, this);
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   834
  m_addressReqTimer[dst].Remove ();
5675
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   835
  m_addressReqTimer[dst].SetArguments (dst);
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   836
  RoutingTableEntry rt;
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   837
  m_routingTable.LookupRoute (dst, rt);
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   838
  rt.IncrementRreqCnt ();
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
   839
  m_routingTable.Update (rt);
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   840
  m_addressReqTimer[dst].Schedule (Time (rt.GetRreqCnt () * NetTraversalTime));
5641
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   841
}
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   842
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   843
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   844
RoutingProtocol::RecvAodv (Ptr<Socket> socket)
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   845
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
   846
  NS_LOG_FUNCTION (this << socket);
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   847
  Address sourceAddress;
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   848
  Ptr<Packet> packet = socket->RecvFrom (sourceAddress);
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
   849
  InetSocketAddress inetSourceAddr = InetSocketAddress::ConvertFrom (sourceAddress);
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
   850
  Ipv4Address sender = inetSourceAddr.GetIpv4 ();
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   851
  Ipv4Address receiver = m_socketAddresses[socket].GetLocal ();
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   852
  NS_LOG_DEBUG ("AODV node " << this << " received a AODV packet from " << sender << " to " << receiver);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   853
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   854
  UpdateRouteToNeighbor (sender, receiver);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   855
  TypeHeader tHeader (AODVTYPE_RREQ);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   856
  packet->RemoveHeader (tHeader);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   857
  if (!tHeader.IsValid ())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   858
    {
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   859
      NS_LOG_DEBUG ("AODV message " << packet->GetUid() << " with unknown type received: " << tHeader.Get() << ". Drop");
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   860
      return; // drop
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   861
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   862
  switch (tHeader.Get ())
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   863
    {
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   864
    case AODVTYPE_RREQ:
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   865
      {
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
   866
        RecvRequest (packet, receiver, sender);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   867
        break;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   868
      }
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   869
    case AODVTYPE_RREP:
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   870
      {
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
   871
        RecvReply (packet, receiver, sender);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   872
        break;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   873
      }
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   874
    case AODVTYPE_RERR:
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   875
      {
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   876
        RecvError (packet, sender);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   877
        break;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   878
      }
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   879
    case AODVTYPE_RREP_ACK:
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   880
      {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   881
        RecvReplyAck (sender);
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   882
        break;
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   883
      }
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   884
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   885
}
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   886
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   887
bool
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   888
RoutingProtocol::UpdateRouteLifeTime (Ipv4Address addr, Time lifetime)
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   889
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
   890
  NS_LOG_FUNCTION (this << addr << lifetime);
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   891
  RoutingTableEntry rt;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   892
  if (m_routingTable.LookupRoute (addr, rt))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   893
    {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   894
      rt.SetFlag (VALID);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   895
      rt.SetRreqCnt (0);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   896
      rt.SetLifeTime (std::max (lifetime, rt.GetLifeTime ()));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   897
      m_routingTable.Update (rt);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   898
      return true;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   899
    }
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   900
  return false;
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   901
}
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   902
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   903
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   904
RoutingProtocol::UpdateRouteToNeighbor (Ipv4Address sender, Ipv4Address receiver)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   905
{
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   906
  NS_LOG_FUNCTION (this << "sender " << sender << " receiver " << receiver);
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   907
  RoutingTableEntry toNeighbor;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   908
  if (!m_routingTable.LookupRoute (sender, toNeighbor))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   909
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   910
      Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   911
      RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/sender, /*know seqno=*/false, /*seqno=*/0,
5658
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
   912
                                  /*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
   913
                                  /*hops=*/1, /*next hop=*/sender, /*lifetime=*/ActiveRouteTimeout);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   914
      m_routingTable.AddRoute (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   915
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   916
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   917
    {
5657
5983e16013d9 UpdateRouteToNeighbor changed to take into account case, when route to node exists in routing table with hop count != 1
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5656
diff changeset
   918
      Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver));
5983e16013d9 UpdateRouteToNeighbor changed to take into account case, when route to node exists in routing table with hop count != 1
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5656
diff changeset
   919
      RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/sender, /*know seqno=*/false, /*seqno=*/0,
5658
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
   920
                                  /*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
   921
                                  /*hops=*/1, /*next hop=*/sender, /*lifetime=*/std::max (ActiveRouteTimeout, toNeighbor.GetLifeTime ()));
5657
5983e16013d9 UpdateRouteToNeighbor changed to take into account case, when route to node exists in routing table with hop count != 1
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5656
diff changeset
   922
      m_routingTable.Update (newEntry);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   923
    }
5843
aa227ef4f60f AODV: fix strange routing record with destination 102.102.102.102, thank to Mariusz Skrocki.
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5749
diff changeset
   924
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   925
}
5578
020a5aa8b40c SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5577
diff changeset
   926
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   927
void
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
   928
RoutingProtocol::RecvRequest (Ptr<Packet> p, Ipv4Address receiver, Ipv4Address src)
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   929
{
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   930
  NS_LOG_FUNCTION (this);
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
   931
  RreqHeader rreqHeader;
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   932
  p->RemoveHeader (rreqHeader);
5621
e6e336252f25 finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5619
diff changeset
   933
e6e336252f25 finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5619
diff changeset
   934
  // A node ignores all RREQs received from any node in its blacklist
e6e336252f25 finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5619
diff changeset
   935
  RoutingTableEntry toPrev;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   936
  if (m_routingTable.LookupRoute (src, toPrev))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   937
    {
5632
0603bb7b561b unit tests updated
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5629
diff changeset
   938
      if (toPrev.IsUnidirectional ())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   939
        return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   940
    }
5621
e6e336252f25 finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5619
diff changeset
   941
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   942
  uint32_t id = rreqHeader.GetId ();
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   943
  Ipv4Address origin = rreqHeader.GetOrigin ();
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
   944
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   945
  /*
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   946
   *  Node checks to determine whether it has received a RREQ with the same Originator IP Address and RREQ ID.
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   947
   *  If such a RREQ has been received, the node silently discards the newly received RREQ.
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   948
   */
5721
408712df1963 [aodv] DPD cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5720
diff changeset
   949
  if (m_rreqIdCache.IsDuplicate (origin, id))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   950
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   951
      return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   952
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   953
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   954
  // Increment RREQ hop count
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   955
  uint8_t hop = rreqHeader.GetHopCount () + 1;
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   956
  rreqHeader.SetHopCount (hop);
5584
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
   957
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   958
  /*
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   959
   *  When the reverse route is created or updated, the following actions on the route are also carried out:
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   960
   *  1. the Originator Sequence Number from the RREQ is compared to the corresponding destination sequence number
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   961
   *     in the route table entry and copied if greater than the existing value there
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   962
   *  2. the valid sequence number field is set to true;
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   963
   *  3. the next hop in the routing table becomes the node from which the  RREQ was received
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   964
   *  4. the hop count is copied from the Hop Count in the RREQ message;
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   965
   *  5. the Lifetime is set to be the maximum of (ExistingLifetime, MinimalLifetime), where
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   966
   *     MinimalLifetime = current time + 2*NetTraversalTime - 2*HopCount*NodeTraversalTime
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   967
   */
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   968
  RoutingTableEntry toOrigin;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   969
  if (!m_routingTable.LookupRoute (origin, toOrigin))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   970
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   971
      Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   972
      RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/origin, /*validSeno=*/true, /*seqNo=*/rreqHeader.GetOriginSeqno (),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   973
                                  /*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), /*hops=*/hop,
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   974
                                  /*nextHop*/src, /*timeLife=*/Time (2 * NetTraversalTime - 2 * hop * NodeTraversalTime));
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   975
      m_routingTable.AddRoute (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   976
    }
5599
5069c4c46ddb SendReplyByIntermediateNode added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5598
diff changeset
   977
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   978
    {
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   979
      if (toOrigin.GetValidSeqNo ())
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   980
        {
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   981
          if (int32_t (rreqHeader.GetOriginSeqno ()) - int32_t (toOrigin.GetSeqNo ()) > 0)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   982
            toOrigin.SetSeqNo (rreqHeader.GetOriginSeqno ());
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   983
        }
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   984
      else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   985
        toOrigin.SetSeqNo (rreqHeader.GetOriginSeqno ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   986
      toOrigin.SetValidSeqNo (true);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   987
      toOrigin.SetNextHop (src);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   988
      toOrigin.SetOutputDevice (m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver)));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   989
      toOrigin.SetInterface (m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   990
      toOrigin.SetHop (hop);
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
   991
      toOrigin.SetLifeTime (std::max (Time (2 * NetTraversalTime - 2 * hop * NodeTraversalTime), toOrigin.GetLifeTime ()));
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   992
      m_routingTable.Update (toOrigin);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   993
    }
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
   994
  NS_LOG_LOGIC (receiver << " receive RREQ to destination " << rreqHeader.GetDst ());
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
   995
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
   996
  //  A node generates a RREP if either:
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   997
  //  (i)  it is itself the destination,
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   998
  if (IsMyOwnAddress (rreqHeader.GetDst ()))
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   999
    {
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
  1000
      m_routingTable.LookupRoute (origin, toOrigin);
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
  1001
      SendReply (rreqHeader, toOrigin);
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
  1002
      return;
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
  1003
    }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1004
  /*
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
  1005
   * (ii) or it has an active route to the destination, the destination sequence number in the node's existing route table entry for the destination
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1006
   *      is valid and greater than or equal to the Destination Sequence Number of the RREQ, and the "destination only" flag is NOT set.
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1007
   */
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1008
  RoutingTableEntry toDst;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1009
  Ipv4Address dst = rreqHeader.GetDst ();
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1010
  if (m_routingTable.LookupRoute (dst, toDst))
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
  1011
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1012
      /*
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1013
       * The Destination Sequence number for the requested destination is set to the maximum of the corresponding value
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1014
       * received in the RREQ message, and the destination sequence value currently maintained by the node for the requested destination.
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1015
       * However, the forwarding node MUST NOT modify its maintained value for the destination sequence number, even if the value
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1016
       * received in the incoming RREQ is larger than the value currently maintained by the forwarding node.
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1017
       */
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1018
      if (rreqHeader.GetUnknownSeqno () || ( (int32_t (toDst.GetSeqNo ()) - int32_t (rreqHeader.GetDstSeqno ()) > 0)
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1019
          && toDst.GetValidSeqNo () ))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1020
        {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1021
          if (!rreqHeader.GetDestinationOnly () && toDst.GetFlag() == VALID)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1022
            {
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
  1023
              m_routingTable.LookupRoute (origin, toOrigin);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1024
              SendReplyByIntermediateNode (toDst, toOrigin, rreqHeader.GetGratiousRrep ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1025
              return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1026
            }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1027
          rreqHeader.SetDstSeqno (toDst.GetSeqNo ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1028
          rreqHeader.SetUnknownSeqno (false);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1029
        }
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
  1030
    }
5655
841e38c18ecf aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5654
diff changeset
  1031
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1032
  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j =
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1033
      m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1034
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1035
      Ptr<Socket> socket = j->first;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1036
      Ipv4InterfaceAddress iface = j->second;
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
  1037
      Ptr<Packet> packet = Create<Packet> ();
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1038
      packet->AddHeader (rreqHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1039
      TypeHeader tHeader (AODVTYPE_RREQ);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1040
      packet->AddHeader (tHeader);
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1041
      // Send to all-hosts broadcast if on /32 addr, subnet-directed otherwise
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1042
      Ipv4Address destination;
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1043
      if (iface.GetMask () == Ipv4Mask::GetOnes ())
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1044
        {
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1045
          destination = Ipv4Address ("255.255.255.255");
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1046
        }
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1047
      else
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1048
        { 
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1049
          destination = iface.GetBroadcast ();
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1050
        }
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1051
      socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1052
    }
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1053
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
  1054
  if (EnableHello)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
  1055
    {
5720
92594e167a58 [aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents: 5719
diff changeset
  1056
      m_htimer.Cancel ();
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6547
diff changeset
  1057
      int rng = UniformVariable().GetInteger (0, 10);
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
  1058
      m_htimer.Schedule (Time (HelloInterval - 0.1 * MilliSeconds(rng)));
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
  1059
    }
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
  1060
}
5573
040121bb814c BroadcastId methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5572
diff changeset
  1061
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1062
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1063
RoutingProtocol::SendReply (RreqHeader const & rreqHeader, RoutingTableEntry const & toOrigin)
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
  1064
{
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
  1065
  NS_LOG_FUNCTION (this << toOrigin.GetDestination ());
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1066
  /*
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1067
   * Destination node MUST increment its own sequence number by one if the sequence number in the RREQ packet is equal to that
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1068
   * incremented value. Otherwise, the destination does not change its sequence number before generating the  RREP message.
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1069
   */
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1070
  if (!rreqHeader.GetUnknownSeqno () && (rreqHeader.GetDstSeqno () == m_seqNo + 1))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1071
    m_seqNo++;
5730
f530c4943146 time diagram + fixed hop count
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5729
diff changeset
  1072
  RrepHeader rrepHeader ( /*prefixSize=*/0, /*hops=*/0, /*dst=*/rreqHeader.GetDst (),
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1073
                          /*dstSeqNo=*/m_seqNo, /*origin=*/toOrigin.GetDestination (), /*lifeTime=*/MyRouteTimeout);
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1074
  Ptr<Packet> packet = Create<Packet> ();
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1075
  packet->AddHeader (rrepHeader);
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1076
  TypeHeader tHeader (AODVTYPE_RREP);
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1077
  packet->AddHeader (tHeader);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1078
  Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ());
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1079
  NS_ASSERT (socket);
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
  1080
  socket->SendTo (packet, 0, InetSocketAddress (toOrigin.GetNextHop (), AODV_PORT));
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1081
}
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1082
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1083
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1084
RoutingProtocol::SendReplyByIntermediateNode (RoutingTableEntry & toDst, RoutingTableEntry & toOrigin, bool gratRep)
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1085
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
  1086
  NS_LOG_FUNCTION (this);
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1087
  RrepHeader rrepHeader (/*prefix size=*/0, /*hops=*/toDst.GetHop (), /*dst=*/toDst.GetDestination (), /*dst seqno=*/toDst.GetSeqNo (),
5656
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1088
                         /*origin=*/toOrigin.GetDestination (), /*lifetime=*/toDst.GetLifeTime ());
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1089
  /* If the node we received a RREQ for is a neighbor we are
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1090
   * probably facing a unidirectional link... Better request a RREP-ack
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1091
   */
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1092
  if (toDst.GetHop () == 1)
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1093
    {
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1094
      rrepHeader.SetAckRequired (true);
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1095
      RoutingTableEntry toNextHop;
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1096
      m_routingTable.LookupRoute (toOrigin.GetNextHop (), toNextHop);
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1097
      toNextHop.m_ackTimer.SetFunction (&RoutingProtocol::AckTimerExpire, this);
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1098
      toNextHop.m_ackTimer.SetArguments (toNextHop.GetDestination (), BlackListTimeout);
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1099
      toNextHop.m_ackTimer.SetDelay (NextHopWait);
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
  1100
    }
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1101
  toDst.InsertPrecursor (toOrigin.GetNextHop ());
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1102
  toOrigin.InsertPrecursor (toDst.GetNextHop ());
5627
3fb6bda728ad unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5626
diff changeset
  1103
  m_routingTable.Update (toDst);
3fb6bda728ad unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5626
diff changeset
  1104
  m_routingTable.Update (toOrigin);
5587
7441c907cdee header flags fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
  1105
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
  1106
  Ptr<Packet> packet = Create<Packet> ();
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1107
  packet->AddHeader (rrepHeader);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1108
  TypeHeader tHeader (AODVTYPE_RREP);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1109
  packet->AddHeader (tHeader);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1110
  Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ());
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1111
  NS_ASSERT (socket);
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
  1112
  socket->SendTo (packet, 0, InetSocketAddress (toOrigin.GetNextHop (), AODV_PORT));
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
  1113
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1114
  // Generating gratuitous RREPs
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
  1115
  if (gratRep)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1116
    {
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1117
      RrepHeader gratRepHeader (/*prefix size=*/0, /*hops=*/toOrigin.GetHop (), /*dst=*/toOrigin.GetDestination (),
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1118
                                /*dst seqno=*/toOrigin.GetSeqNo (), /*origin=*/toDst.GetDestination (),
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1119
                                /*lifetime=*/toOrigin.GetLifeTime ());
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1120
      Ptr<Packet> packetToDst = Create<Packet> ();
5659
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1121
      packetToDst->AddHeader (gratRepHeader);
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1122
      TypeHeader type (AODVTYPE_RREP);
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1123
      packetToDst->AddHeader (type);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1124
      Ptr<Socket> socket = FindSocketWithInterfaceAddress (toDst.GetInterface ());
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1125
      NS_ASSERT (socket);
5659
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1126
      NS_LOG_LOGIC ("Send gratuitous RREP " << packet->GetUid());
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
  1127
      socket->SendTo (packetToDst, 0, InetSocketAddress (toDst.GetNextHop (), AODV_PORT));
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1128
    }
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
  1129
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
  1130
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1131
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1132
RoutingProtocol::SendReplyAck (Ipv4Address neighbor)
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
  1133
{
5679
c5986afb199a RecvReplyAck added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5677
diff changeset
  1134
  NS_LOG_FUNCTION (this << " to " << neighbor);
5611
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1135
  RrepAckHeader h;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1136
  TypeHeader typeHeader (AODVTYPE_RREP_ACK);
5611
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1137
  Ptr<Packet> packet = Create<Packet> ();
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1138
  packet->AddHeader (h);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1139
  packet->AddHeader (typeHeader);
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1140
  RoutingTableEntry toNeighbor;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1141
  m_routingTable.LookupRoute (neighbor, toNeighbor);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1142
  Ptr<Socket> socket = FindSocketWithInterfaceAddress (toNeighbor.GetInterface ());
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1143
  NS_ASSERT (socket);
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
  1144
  socket->SendTo (packet, 0, InetSocketAddress (neighbor, AODV_PORT));
5611
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1145
}
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1146
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1147
void
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
  1148
RoutingProtocol::RecvReply (Ptr<Packet> p, Ipv4Address receiver, Ipv4Address sender)
5611
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1149
{
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1150
  NS_LOG_FUNCTION(this << " src " << sender);
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
  1151
  RrepHeader rrepHeader;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1152
  p->RemoveHeader (rrepHeader);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1153
  Ipv4Address dst = rrepHeader.GetDst ();
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
  1154
  NS_LOG_LOGIC("RREP destination " << dst << " RREP origin " << rrepHeader.GetOrigin());
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
  1155
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1156
  uint8_t hop = rrepHeader.GetHopCount () + 1;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1157
  rrepHeader.SetHopCount (hop);
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1158
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1159
  // If RREP is Hello message
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
  1160
  if (dst == rrepHeader.GetOrigin ())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1161
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1162
      ProcessHello (rrepHeader, receiver);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1163
      return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1164
    }
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1165
5611
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1166
  /*
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1167
   * If the route table entry to the destination is created or updated, then the following actions occur:
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1168
   * -  the route is marked as active,
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1169
   * -  the destination sequence number is marked as valid,
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1170
   * -  the next hop in the route entry is assigned to be the node from which the RREP is received,
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1171
   *    which is indicated by the source IP address field in the IP header,
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1172
   * -  the hop count is set to the value of the hop count from RREP message + 1
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1173
   * -  the expiry time is set to the current time plus the value of the Lifetime in the RREP message,
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1174
   * -  and the destination sequence number is the Destination Sequence Number in the RREP message.
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1175
   */
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
  1176
  Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver));
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
  1177
  RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/dst, /*validSeqNo=*/true, /*seqno=*/rrepHeader.GetDstSeqno (),
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1178
                              /*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),/*hop=*/hop,
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1179
                              /*nextHop=*/sender, /*lifeTime=*/rrepHeader.GetLifeTime ());
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1180
  RoutingTableEntry toDst;
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
  1181
  if (m_routingTable.LookupRoute (dst, toDst))
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
  1182
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1183
      /*
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1184
       * The existing entry is updated only in the following circumstances:
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1185
       * (i) the sequence number in the routing table is marked as invalid in route table entry.
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1186
       */
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1187
      if (!toDst.GetValidSeqNo ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1188
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1189
          m_routingTable.Update (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1190
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1191
      // (ii)the Destination Sequence Number in the RREP is greater than the node's copy of the destination sequence number and the known value is valid,
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1192
      else if ((int32_t (rrepHeader.GetDstSeqno ()) - int32_t (toDst.GetSeqNo ())) > 0)
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1193
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1194
          m_routingTable.Update (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1195
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1196
      else
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1197
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1198
          // (iii) the sequence numbers are the same, but the route is marked as inactive.
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1199
          if ((rrepHeader.GetDstSeqno () == toDst.GetSeqNo ()) && (toDst.GetFlag () != VALID))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1200
            {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1201
              m_routingTable.Update (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1202
            }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1203
          // (iv)  the sequence numbers are the same, and the New Hop Count is smaller than the hop count in route table entry.
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1204
          else if ((rrepHeader.GetDstSeqno () == toDst.GetSeqNo ()) && (hop < toDst.GetHop ()))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1205
            {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1206
              m_routingTable.Update (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1207
            }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1208
        }
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
  1209
    }
5601
82c874729b6c queue modified
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5600
diff changeset
  1210
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1211
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1212
      // The forward route for this destination is created if it does not already exist.
5729
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1213
      NS_LOG_LOGIC ("add new route");
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1214
      m_routingTable.AddRoute (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1215
    }
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1216
  // Acknowledge receipt of the RREP by sending a RREP-ACK message back
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1217
  if (rrepHeader.GetAckRequired ())
5659
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1218
    {
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1219
      SendReplyAck (sender);
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1220
      rrepHeader.SetAckRequired (false);
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1221
    }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1222
  NS_LOG_LOGIC ("receiver " << receiver << " origin " << rrepHeader.GetOrigin ());
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1223
  if (IsMyOwnAddress (rrepHeader.GetOrigin ()))
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
  1224
    {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1225
      if (toDst.GetFlag () == IN_SEARCH)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1226
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1227
          m_routingTable.Update (newEntry);
5697
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
  1228
          m_addressReqTimer[dst].Remove ();
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1229
          m_addressReqTimer.erase (dst);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1230
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1231
      SendPacketFromQueue (rrepHeader.GetDst (), newEntry.GetRoute ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1232
      return;
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
  1233
    }
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
  1234
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1235
  RoutingTableEntry toOrigin;
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1236
  if (! m_routingTable.LookupRoute (rrepHeader.GetOrigin (), toOrigin) || toOrigin.GetFlag () == IN_SEARCH)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1237
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1238
      return; // Impossible! drop.
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1239
    }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1240
  toOrigin.SetLifeTime (std::max (ActiveRouteTimeout, toOrigin.GetLifeTime ()));
5627
3fb6bda728ad unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5626
diff changeset
  1241
  m_routingTable.Update (toOrigin);
5622
aa34a270824c route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5621
diff changeset
  1242
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1243
  // Update information about precursors
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1244
  if (m_routingTable.LookupValidRoute (rrepHeader.GetDst (), toDst))
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1245
    {
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1246
      toDst.InsertPrecursor (toOrigin.GetNextHop ());
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1247
      m_routingTable.Update (toDst);
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1248
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1249
      RoutingTableEntry toNextHopToDst;
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1250
      m_routingTable.LookupRoute (toDst.GetNextHop (), toNextHopToDst);
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1251
      toNextHopToDst.InsertPrecursor (toOrigin.GetNextHop ());
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1252
      m_routingTable.Update (toNextHopToDst);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
  1253
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1254
      toOrigin.InsertPrecursor (toDst.GetNextHop ());
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1255
      m_routingTable.Update (toOrigin);
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1256
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1257
      RoutingTableEntry toNextHopToOrigin;
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1258
      m_routingTable.LookupRoute (toOrigin.GetNextHop (), toNextHopToOrigin);
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1259
      toNextHopToOrigin.InsertPrecursor (toDst.GetNextHop ());
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1260
      m_routingTable.Update (toNextHopToOrigin);
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1261
    }
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1262
      
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
  1263
  Ptr<Packet> packet = Create<Packet> ();
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1264
  packet->AddHeader (rrepHeader);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1265
  TypeHeader tHeader (AODVTYPE_RREP);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1266
  packet->AddHeader (tHeader);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1267
  Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ());
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1268
  NS_ASSERT (socket);
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
  1269
  socket->SendTo (packet, 0, InetSocketAddress (toOrigin.GetNextHop (), AODV_PORT));
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1270
}
5586
18b0f80bbab7 RecvReply fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5584
diff changeset
  1271
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1272
void
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
  1273
RoutingProtocol::RecvReplyAck (Ipv4Address neighbor)
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1274
{
5679
c5986afb199a RecvReplyAck added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5677
diff changeset
  1275
  NS_LOG_FUNCTION (this);
c5986afb199a RecvReplyAck added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5677
diff changeset
  1276
  RoutingTableEntry rt;
c5986afb199a RecvReplyAck added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5677
diff changeset
  1277
  if(m_routingTable.LookupRoute(neighbor, rt))
c5986afb199a RecvReplyAck added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5677
diff changeset
  1278
    {
c5986afb199a RecvReplyAck added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5677
diff changeset
  1279
      rt.m_ackTimer.Cancel ();
c5986afb199a RecvReplyAck added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5677
diff changeset
  1280
      rt.SetFlag (VALID);
c5986afb199a RecvReplyAck added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5677
diff changeset
  1281
      m_routingTable.Update(rt);
c5986afb199a RecvReplyAck added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5677
diff changeset
  1282
    }
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1283
}
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1284
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1285
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1286
RoutingProtocol::ProcessHello (RrepHeader const & rrepHeader, Ipv4Address receiver )
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1287
{
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
  1288
  NS_LOG_FUNCTION(this << "from " << rrepHeader.GetDst ());
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1289
  /*
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1290
   *  Whenever a node receives a Hello message from a neighbor, the node
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1291
   * SHOULD make sure that it has an active route to the neighbor, and
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1292
   * create one if necessary.
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1293
   */
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1294
  RoutingTableEntry toNeighbor;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1295
  if (!m_routingTable.LookupRoute (rrepHeader.GetDst (), toNeighbor))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1296
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1297
      Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1298
      RoutingTableEntry newEntry (/*device=*/dev, /*dst=*/rrepHeader.GetDst (), /*validSeqNo=*/true, /*seqno=*/rrepHeader.GetDstSeqno (),
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
  1299
                                  /*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
  1300
                                  /*hop=*/1, /*nextHop=*/rrepHeader.GetDst (), /*lifeTime=*/rrepHeader.GetLifeTime ());
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1301
      m_routingTable.AddRoute (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1302
    }
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1303
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1304
    {
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
  1305
      toNeighbor.SetLifeTime (std::max (Time (AllowedHelloLoss * HelloInterval), toNeighbor.GetLifeTime ()));
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1306
      toNeighbor.SetSeqNo (rrepHeader.GetDstSeqno ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1307
      toNeighbor.SetValidSeqNo (true);
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1308
      toNeighbor.SetFlag (VALID);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1309
      toNeighbor.SetOutputDevice (m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (receiver)));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1310
      toNeighbor.SetInterface (m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1311
      m_routingTable.Update (toNeighbor);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1312
    }
5658
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
  1313
  if (EnableHello)
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
  1314
    {
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
  1315
      m_nb.Update (rrepHeader.GetDst (), Time (AllowedHelloLoss * HelloInterval));
5658
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
  1316
    }
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
  1317
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
  1318
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1319
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1320
RoutingProtocol::RecvError (Ptr<Packet> p, Ipv4Address src )
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
  1321
{
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1322
  NS_LOG_FUNCTION (this << " from " << src);
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
  1323
  RerrHeader rerrHeader;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1324
  p->RemoveHeader (rerrHeader);
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1325
  std::map<Ipv4Address, uint32_t> dstWithNextHopSrc;
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1326
  std::map<Ipv4Address, uint32_t> unreachable;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1327
  m_routingTable.GetListOfDestinationWithNextHop (src, dstWithNextHopSrc);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1328
  std::pair<Ipv4Address, uint32_t> un;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1329
  while (rerrHeader.RemoveUnDestination (un))
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1330
    {
5638
1b5112aa7de4 neighbors moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5635
diff changeset
  1331
      if (m_nb.IsNeighbor (un.first))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1332
        SendRerrWhenBreaksLinkToNextHop (un.first);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1333
      else
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1334
        {
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1335
          for (std::map<Ipv4Address, uint32_t>::const_iterator i =
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1336
              dstWithNextHopSrc.begin (); i != dstWithNextHopSrc.end (); ++i)
5729
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1337
            {
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1338
              if (i->first == un.first)
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1339
                {
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1340
                  Ipv4Address dst = un.first;
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1341
                  unreachable.insert (un);
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1342
                }
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1343
            }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1344
        }
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1345
    }
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1346
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1347
  std::vector<Ipv4Address> precursors;
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1348
  for (std::map<Ipv4Address, uint32_t>::const_iterator i = unreachable.begin ();
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1349
      i != unreachable.end ();)
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1350
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1351
      if (!rerrHeader.AddUnDestination (i->first, i->second))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1352
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1353
          TypeHeader typeHeader (AODVTYPE_RERR);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1354
          Ptr<Packet> packet = Create<Packet> ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1355
          packet->AddHeader (rerrHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1356
          packet->AddHeader (typeHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1357
          SendRerrMessage (packet, precursors);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1358
          rerrHeader.Clear ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1359
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1360
      else
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1361
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1362
          RoutingTableEntry toDst;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1363
          m_routingTable.LookupRoute (i->first, toDst);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1364
          toDst.GetPrecursors (precursors);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1365
          ++i;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1366
        }
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1367
    }
5673
7288363ba82f forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5672
diff changeset
  1368
  if (rerrHeader.GetDestCount () != 0)
7288363ba82f forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5672
diff changeset
  1369
    {
7288363ba82f forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5672
diff changeset
  1370
      TypeHeader typeHeader (AODVTYPE_RERR);
7288363ba82f forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5672
diff changeset
  1371
      Ptr<Packet> packet = Create<Packet> ();
7288363ba82f forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5672
diff changeset
  1372
      packet->AddHeader (rerrHeader);
7288363ba82f forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5672
diff changeset
  1373
      packet->AddHeader (typeHeader);
7288363ba82f forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5672
diff changeset
  1374
      SendRerrMessage (packet, precursors);
7288363ba82f forwarding RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5672
diff changeset
  1375
    }
5677
81bd758dd7f4 raw socket killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5676
diff changeset
  1376
  m_routingTable.InvalidateRoutesWithDst (unreachable);
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1377
}
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1378
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1379
void
5675
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
  1380
RoutingProtocol::RouteRequestTimerExpire (Ipv4Address dst)
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1381
{
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1382
  NS_LOG_LOGIC(this);
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1383
  RoutingTableEntry toDst;
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1384
  if (m_routingTable.LookupValidRoute (dst, toDst))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1385
    {
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1386
      SendPacketFromQueue (dst, toDst.GetRoute ());
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1387
      NS_LOG_LOGIC ("route to " << dst << " found");
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1388
      return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1389
    }
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1390
  /*
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1391
   *  If a route discovery has been attempted RreqRetries times at the maximum TTL without
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1392
   *  receiving any RREP, all data packets destined for the corresponding destination SHOULD be
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1393
   *  dropped from the buffer and a Destination Unreachable message SHOULD be delivered to the application.
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1394
   */
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1395
  if (toDst.GetRreqCnt () == RreqRetries)
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1396
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1397
      NS_LOG_LOGIC("route discovery to " << dst << " has been attempted RreqRetries times");
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1398
      m_addressReqTimer.erase (dst);
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1399
      m_routingTable.DeleteRoute (dst);
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1400
      NS_LOG_DEBUG ("Route not found. Drop packet with dst " << dst);
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1401
      m_queue.DropPacketWithDst (dst);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1402
      return;
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1403
    }
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1404
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1405
  if (toDst.GetFlag () == IN_SEARCH)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1406
    {
5675
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
  1407
      NS_LOG_LOGIC ("Send new RREQ to " << dst << " ttl " << NetDiameter);
d323064dd02f expanding ring search killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5674
diff changeset
  1408
      SendRequest (dst);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1409
    }
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1410
  else
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1411
    {
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1412
      NS_LOG_DEBUG ("Route down. Stop search. Drop packet with destination " << dst);
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1413
      m_addressReqTimer.erase(dst);
5654
afab4fbeb34e comments added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5653
diff changeset
  1414
      m_routingTable.DeleteRoute(dst);
5660
ed22e758b5f5 RoutingProtocol::DropFromQueue killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5659
diff changeset
  1415
      m_queue.DropPacketWithDst(dst);
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1416
    }
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1417
}
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1418
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1419
void
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1420
RoutingProtocol::HelloTimerExpire ()
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1421
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
  1422
  NS_LOG_FUNCTION (this);
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1423
  SendHello ();
5720
92594e167a58 [aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents: 5719
diff changeset
  1424
  m_htimer.Cancel ();
7040
444bb5c76bff get rid of Scalar and co.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6547
diff changeset
  1425
  int rng = UniformVariable().GetInteger (0, 100);
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
  1426
  Time t = Time (0.01 * MilliSeconds(rng));
5720
92594e167a58 [aodv] Code style fixes proposed by Faker in his review
Pavel Boyko <boyko@iitp.ru>
parents: 5719
diff changeset
  1427
  m_htimer.Schedule (HelloInterval - t);
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1428
}
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1429
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1430
void
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
  1431
RoutingProtocol::RreqRateLimitTimerExpire ()
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
  1432
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
  1433
  NS_LOG_FUNCTION (this);
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
  1434
  m_rreqCount = 0;
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1435
  m_rreqRateLimitTimer.Schedule (Seconds (1));
5688
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
  1436
}
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
  1437
d30f52fc3aa5 RREQ rate limit added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5687
diff changeset
  1438
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1439
RoutingProtocol::AckTimerExpire (Ipv4Address neighbor, Time blacklistTimeout)
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1440
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
  1441
  NS_LOG_FUNCTION (this);
5729
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1442
  m_routingTable.MarkLinkAsUnidirectional (neighbor, blacklistTimeout);
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1443
}
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1444
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1445
void
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1446
RoutingProtocol::SendHello ()
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1447
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
  1448
  NS_LOG_FUNCTION (this);
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1449
  /* Broadcast a RREP with TTL = 1 with the RREP message fields set as follows:
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1450
   *   Destination IP Address         The node's IP address.
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1451
   *   Destination Sequence Number    The node's latest sequence number.
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1452
   *   Hop Count                      0
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1453
   *   Lifetime                       AllowedHelloLoss * HelloInterval
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1454
   */
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
  1455
  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1456
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1457
      Ptr<Socket> socket = j->first;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1458
      Ipv4InterfaceAddress iface = j->second;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1459
      RrepHeader helloHeader (/*prefix size=*/0, /*hops=*/0, /*dst=*/iface.GetLocal (), /*dst seqno=*/m_seqNo,
7044
f94b264549d1 introduce implicit conversion operator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 7040
diff changeset
  1460
                              /*origin=*/iface.GetLocal (),/*lifetime=*/Time (AllowedHelloLoss * HelloInterval));
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1461
      Ptr<Packet> packet = Create<Packet> ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1462
      packet->AddHeader (helloHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1463
      TypeHeader tHeader (AODVTYPE_RREP);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1464
      packet->AddHeader (tHeader);
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1465
      // Send to all-hosts broadcast if on /32 addr, subnet-directed otherwise
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1466
      Ipv4Address destination;
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1467
      if (iface.GetMask () == Ipv4Mask::GetOnes ())
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1468
        {
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1469
          destination = Ipv4Address ("255.255.255.255");
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1470
        }
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1471
      else
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1472
        { 
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1473
          destination = iface.GetBroadcast ();
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1474
        }
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1475
      socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1476
    }
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1477
}
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1478
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1479
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1480
RoutingProtocol::SendPacketFromQueue (Ipv4Address dst, Ptr<Ipv4Route> route)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1481
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
  1482
  NS_LOG_FUNCTION (this);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1483
  QueueEntry queueEntry;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1484
  while (m_queue.Dequeue (dst, queueEntry))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1485
    {
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1486
      DeferredRouteOutputTag tag;
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1487
      Ptr<Packet> p = ConstCast<Packet> (queueEntry.GetPacket ());
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1488
      if (p->RemovePacketTag (tag) && 
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1489
          tag.oif != -1 && 
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1490
          tag.oif != m_ipv4->GetInterfaceForDevice (route->GetOutputDevice ()))
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1491
        {
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1492
          NS_LOG_DEBUG ("Output device doesn't match. Dropped.");
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1493
          return;
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1494
        }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1495
      UnicastForwardCallback ucb = queueEntry.GetUnicastForwardCallback ();
6088
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1496
      Ipv4Header header = queueEntry.GetIpv4Header ();
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1497
      header.SetSource (route->GetSource ());
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1498
      header.SetTtl (header.GetTtl() + 1); // compensate extra TTL decrement by fake loopback routing
f711b7176958 AODV bugs 772 and 777 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6065
diff changeset
  1499
      ucb (route, p, header);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1500
    }
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1501
}
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1502
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1503
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1504
RoutingProtocol::SendRerrWhenBreaksLinkToNextHop (Ipv4Address nextHop)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1505
{
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1506
  NS_LOG_FUNCTION (this << nextHop);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1507
  RerrHeader rerrHeader;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1508
  std::vector<Ipv4Address> precursors;
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1509
  std::map<Ipv4Address, uint32_t> unreachable;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1510
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1511
  RoutingTableEntry toNextHop;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1512
  if (!m_routingTable.LookupRoute (nextHop, toNextHop))
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1513
    return;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1514
  toNextHop.GetPrecursors (precursors);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1515
  rerrHeader.AddUnDestination (nextHop, toNextHop.GetSeqNo ());
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1516
  m_routingTable.GetListOfDestinationWithNextHop (nextHop, unreachable);
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1517
  for (std::map<Ipv4Address, uint32_t>::const_iterator i = unreachable.begin (); i
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1518
      != unreachable.end ();)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1519
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1520
      if (!rerrHeader.AddUnDestination (i->first, i->second))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1521
        {
5672
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1522
          NS_LOG_LOGIC ("Send RERR message with maximum size.");
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1523
          TypeHeader typeHeader (AODVTYPE_RERR);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1524
          Ptr<Packet> packet = Create<Packet> ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1525
          packet->AddHeader (rerrHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1526
          packet->AddHeader (typeHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1527
          SendRerrMessage (packet, precursors);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1528
          rerrHeader.Clear ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1529
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1530
      else
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1531
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1532
          RoutingTableEntry toDst;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1533
          m_routingTable.LookupRoute (i->first, toDst);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1534
          toDst.GetPrecursors (precursors);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1535
          ++i;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1536
        }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1537
    }
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1538
  if (rerrHeader.GetDestCount () != 0)
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1539
    {
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1540
      TypeHeader typeHeader (AODVTYPE_RERR);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1541
      Ptr<Packet> packet = Create<Packet> ();
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1542
      packet->AddHeader (rerrHeader);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1543
      packet->AddHeader (typeHeader);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1544
      SendRerrMessage (packet, precursors);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1545
    }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1546
  unreachable.insert (std::make_pair (nextHop, toNextHop.GetSeqNo ()));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1547
  m_routingTable.InvalidateRoutesWithDst (unreachable);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1548
}
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
  1549
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1550
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1551
RoutingProtocol::SendRerrWhenNoRouteToForward (Ipv4Address dst,
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1552
    uint32_t dstSeqNo, Ipv4Address origin)
5672
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1553
{
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1554
  NS_LOG_FUNCTION (this);
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1555
  RerrHeader rerrHeader;
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1556
  rerrHeader.AddUnDestination (dst, dstSeqNo);
5672
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1557
  RoutingTableEntry toOrigin;
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1558
  Ptr<Packet> packet = Create<Packet> ();
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1559
  packet->AddHeader (rerrHeader);
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1560
  packet->AddHeader (TypeHeader (AODVTYPE_RERR));
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1561
  if (m_routingTable.LookupValidRoute (origin, toOrigin))
5672
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1562
    {
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1563
      Ptr<Socket> socket = FindSocketWithInterfaceAddress (
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1564
          toOrigin.GetInterface ());
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1565
      NS_ASSERT (socket);
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1566
      NS_LOG_LOGIC ("Unicast RERR to the source of the data transmission");
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1567
      socket->SendTo (packet, 0, InetSocketAddress (toOrigin.GetNextHop (), AODV_PORT));
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1568
     }
5672
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1569
  else
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1570
    {
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1571
      for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator i =
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1572
          m_socketAddresses.begin (); i != m_socketAddresses.end (); ++i)
5672
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1573
        {
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1574
          Ptr<Socket> socket = i->first;
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1575
          Ipv4InterfaceAddress iface = i->second;
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1576
          NS_ASSERT (socket);
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1577
          NS_LOG_LOGIC ("Broadcast RERR message from interface " << iface.GetLocal());
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1578
          // Send to all-hosts broadcast if on /32 addr, subnet-directed otherwise
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1579
          Ipv4Address destination;
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1580
          if (iface.GetMask () == Ipv4Mask::GetOnes ())
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1581
            {
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1582
              destination = Ipv4Address ("255.255.255.255");
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1583
            }
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1584
          else
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1585
            { 
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1586
              destination = iface.GetBroadcast ();
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1587
            }
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1588
          socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
5672
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1589
        }
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1590
    }
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1591
}
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1592
3c1ac1338476 Send RERR message when no active route to forward packet
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5669
diff changeset
  1593
void
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1594
RoutingProtocol::SendRerrMessage (Ptr<Packet> packet, std::vector<Ipv4Address> precursors)
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1595
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
  1596
  NS_LOG_FUNCTION (this);
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
  1597
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
  1598
  if (precursors.empty ())
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1599
    {
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1600
      NS_LOG_LOGIC ("No precursors");
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1601
      return;
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1602
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1603
  // If there is only one precursor, RERR SHOULD be unicast toward that precursor
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1604
  if (precursors.size () == 1)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1605
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1606
      RoutingTableEntry toPrecursor;
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1607
      if (m_routingTable.LookupValidRoute (precursors.front (), toPrecursor))
5697
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
  1608
        {
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1609
          Ptr<Socket> socket = FindSocketWithInterfaceAddress (toPrecursor.GetInterface ());
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1610
          NS_ASSERT (socket);
5697
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
  1611
          NS_LOG_LOGIC ("one precursor => unicast RERR to " << toPrecursor.GetDestination() << " from " << toPrecursor.GetInterface ().GetLocal ());
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
  1612
          socket->SendTo (packet, 0, InetSocketAddress (precursors.front (), AODV_PORT));
acf61aefb10f forwarding broadcast fixed + sending RERR fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5696
diff changeset
  1613
        }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1614
      return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1615
    }
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1616
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1617
  //  Should only transmit RERR on those interfaces which have precursor nodes for the broken route
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1618
  std::vector<Ipv4InterfaceAddress> ifaces;
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1619
  RoutingTableEntry toPrecursor;
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1620
  for (std::vector<Ipv4Address>::const_iterator i = precursors.begin (); i != precursors.end (); ++i)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1621
    {
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1622
      if (m_routingTable.LookupValidRoute (*i, toPrecursor) && 
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1623
          std::find (ifaces.begin (), ifaces.end (), toPrecursor.GetInterface ()) == ifaces.end ())
5729
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1624
        {
6090
1961fb8188e1 AODV bug 812 fixed
Pavel Boyko <boyko@iitp.ru>
parents: 6088
diff changeset
  1625
            ifaces.push_back (toPrecursor.GetInterface ());
5729
3fe43de9a826 [aodv] braces for loops added
Elena Buchatskaia <borovkovaes@iitp.ru>
parents: 5722
diff changeset
  1626
        }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1627
    }
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1628
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1629
  for (std::vector<Ipv4InterfaceAddress>::const_iterator i = ifaces.begin (); i != ifaces.end (); ++i)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1630
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1631
      Ptr<Socket> socket = FindSocketWithInterfaceAddress (*i);
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1632
      NS_ASSERT (socket);
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1633
      NS_LOG_LOGIC ("Broadcast RERR message from interface " << i->GetLocal());
6484
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1634
      // Send to all-hosts broadcast if on /32 addr, subnet-directed otherwise
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1635
      Ipv4Address destination;
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1636
      if (i->GetMask () == Ipv4Mask::GetOnes ())
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1637
        {
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1638
          destination = Ipv4Address ("255.255.255.255");
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1639
        }
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1640
      else
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1641
        { 
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1642
          destination = i->GetBroadcast ();
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1643
        }
48625d668186 Bug 964 - AODV does not work with host addressed interfaces
Elena Buchatskaya <sunnmy@iitp.ru>
parents: 6483
diff changeset
  1644
      socket->SendTo (packet, 0, InetSocketAddress (destination, AODV_PORT));
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1645
    }
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1646
}
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
  1647
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1648
Ptr<Socket>
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1649
RoutingProtocol::FindSocketWithInterfaceAddress (Ipv4InterfaceAddress addr ) const
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1650
{
6354
c9357870bd3c Add some function logging to aodv-routing-protocol.cc
Tom Henderson <tomh@tomh.org>
parents: 6090
diff changeset
  1651
  NS_LOG_FUNCTION (this << addr);
5699
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1652
  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j =
e3e1b77816a1 coding style
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5697
diff changeset
  1653
      m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1654
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1655
      Ptr<Socket> socket = j->first;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1656
      Ipv4InterfaceAddress iface = j->second;
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1657
      if (iface == addr)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1658
        return socket;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1659
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1660
  Ptr<Socket> socket;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1661
  return socket;
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1662
}
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1663
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1664
}
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1665
}