src/routing/aodv/aodv-routing-protocol.cc
author Borovkova Elena <borovkovaes@iitp.ru>
Mon, 17 Aug 2009 11:23:50 +0400
changeset 5666 e22f5d735495
parent 5665 787190c03dd0
child 5667 2a81f8bf0199
permissions -rw-r--r--
RoutingProtocol::NotifyInterfaceUp added
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
 *
5591
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5590
diff changeset
    25
 * Authors: Elena Borovkova <borovkovaes@iitp.ru>
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
 */
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    28
#include "aodv-routing-protocol.h"
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
    29
#include "ns3/socket.h"
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    30
#include "ns3/simulator.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    31
#include "ns3/log.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    32
#include "ns3/random-variable.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    33
#include "ns3/inet-socket-address.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    34
#include "ns3/ipv4-routing-protocol.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    35
#include "ns3/ipv4-route.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    36
#include "ns3/boolean.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    37
#include "ns3/uinteger.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    38
#include "ns3/enum.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    39
#include "ns3/trace-source-accessor.h"
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    40
#include "ns3/ipv4-header.h"
5580
f3e2c49c5ea7 SendRequest seems to be fixed
Pavel Boyko <boyko@iitp.ru>
parents: 5579
diff changeset
    41
#include "ns3/udp-header.h"
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
    42
#include "ns3/nstime.h"
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
    43
#include "ns3/net-device.h"
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
    44
5613
c2e4bad4affc Raw socket nearly work
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5612
diff changeset
    45
#include "ns3/raw-socket-factory.h"
5614
e4ac62d42079 BuildHeader added + support of raw socket in ipv4-l3-protol added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5613
diff changeset
    46
#include "src/internet-stack/udp-l4-protocol.h"
5622
aa34a270824c route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5621
diff changeset
    47
#include <algorithm>
5613
c2e4bad4affc Raw socket nearly work
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5612
diff changeset
    48
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    49
NS_LOG_COMPONENT_DEFINE ("AodvRoutingProtocol");
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    50
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    51
namespace ns3
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    52
{
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    53
namespace aodv
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    54
{
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    55
NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol);
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    56
5647
b5e2bb381517 #define AODV_PORT killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5645
diff changeset
    57
/// UDP Port for AODV control traffic
b5e2bb381517 #define AODV_PORT killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5645
diff changeset
    58
const uint32_t RoutingProtocol::AODV_PORT = 654;
5606
e6248d1eea81 handle active neighbors added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5605
diff changeset
    59
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
    60
RoutingProtocol::RoutingProtocol () :
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    61
  RreqRetries (2),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    62
  ActiveRouteTimeout (Seconds (3)),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    63
  NetDiameter (35),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    64
  NodeTraversalTime (MilliSeconds (40)),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    65
  NetTraversalTime (Scalar (2 * NetDiameter) * NodeTraversalTime),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    66
  PathDiscoveryTime ( Scalar (2) * NetTraversalTime),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    67
  MyRouteTimeout (Scalar (2) * std::max (PathDiscoveryTime, ActiveRouteTimeout)),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    68
  HelloInterval(Seconds (1)),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    69
  AllowedHelloLoss (2),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
    70
  DeletePeriod (Scalar(5) * std::max(ActiveRouteTimeout, HelloInterval)),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    71
  NextHopWait (NodeTraversalTime + MilliSeconds (10)),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    72
  TtlStart (2),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    73
  TtlIncrement (2),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    74
  TtlThreshold (7),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    75
  MaxRepairTtl (0.3* NetDiameter),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    76
  LocalAddTtl (2),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    77
  TimeoutBuffer (2),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    78
  BlackListTimeout(Scalar (RreqRetries) * NetTraversalTime),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    79
  MaxQueueLen (64),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    80
  MaxQueueTime (Seconds(30)),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    81
  DestinationOnly (false),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    82
  GratuitousReply (true),
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
    83
  EnableExpandingRingSearch (false),
5658
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
    84
  EnableHello (true),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    85
  EnableLocalRepair (true),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    86
  m_routingTable (DeletePeriod),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    87
  m_queue (MaxQueueLen, MaxQueueTime),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    88
  m_requestId (0),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    89
  m_seqNo (0),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    90
  m_nb(HelloInterval),
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
    91
  m_repairedDst (Ipv4Address ()),
5641
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
    92
  htimer (Timer::CANCEL_ON_DESTROY),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    93
  rtimer (Timer::CANCEL_ON_DESTROY),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    94
  lrtimer (Timer::CANCEL_ON_DESTROY)
5571
b82fbde6cf8d BroadcastIdCache methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5562
diff changeset
    95
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
    96
{
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    97
  if (EnableHello)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
    98
    {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
    99
      m_nb.SetCallback (MakeCallback (&RoutingProtocol::SendRerrWhenBreaksLinkToNextHop, this));
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   100
    }
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   101
  /* BlackListTimeout should be suitably increased if an expanding ring search is used.  In such cases, it should be
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   102
   *    {[(TtlThreshold - TtlStart)/TtlIncrement] + 1 + RreqRetries} *NetTraversalTime.
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   103
   * This is to account for possible additional route discovery attempts.
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   104
   */
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   105
  if (EnableExpandingRingSearch)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   106
    {
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   107
      BlackListTimeout = Scalar ((((TtlThreshold - TtlStart) / TtlIncrement) + 1 + RreqRetries)) * NetTraversalTime;
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   108
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   109
}
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   110
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   111
TypeId
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   112
RoutingProtocol::GetTypeId (void)
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   113
{
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   114
  static TypeId tid = TypeId ("ns3::aodv::RoutingProtocol")
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   115
      .SetParent<Ipv4RoutingProtocol> ()
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   116
      .AddConstructor<RoutingProtocol> ()
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   117
      .AddAttribute ("HelloInterval", "HELLO messages emission interval.",
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   118
                     TimeValue (Seconds (1)),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   119
                     MakeTimeAccessor (&RoutingProtocol::HelloInterval),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   120
                     MakeTimeChecker ())
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   121
      .AddAttribute ("RreqRetries", "Maximum number of retransmissions of RREQ to discover a route",
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   122
                     UintegerValue (2),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   123
                     MakeUintegerAccessor (&RoutingProtocol::RreqRetries),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   124
                     MakeUintegerChecker<uint32_t> ())
5625
022e4ebc7afd AODV cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5624
diff changeset
   125
      .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
   126
                     "queuing delays, interrupt processing times and transfer times.",
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   127
                     TimeValue (MilliSeconds (40)),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   128
                     MakeTimeAccessor (&RoutingProtocol::NodeTraversalTime),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   129
                     MakeTimeChecker ())
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   130
      .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
   131
                     TimeValue (Seconds (3)),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   132
                     MakeTimeAccessor (&RoutingProtocol::ActiveRouteTimeout),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   133
                     MakeTimeChecker ())
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   134
      .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
   135
                     UintegerValue (35),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   136
                     MakeUintegerAccessor (&RoutingProtocol::NetDiameter),
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   137
                     MakeUintegerChecker<uint32_t> ())
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   138
      .AddAttribute ("TtlStart", "Initial value of TTL in RREQ  when use an expanding ring search "
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   139
                     "(should be set to at least 2 if Hello messages are used for local connectivity information.)",
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   140
                     UintegerValue (2),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   141
                     MakeUintegerAccessor (&RoutingProtocol::TtlStart),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   142
                     MakeUintegerChecker<uint16_t> ())
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   143
      .AddAttribute ("TtlIncrement", "Increment value of RREQ TTL when use an expanding ring search",
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::TtlIncrement),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   146
                     MakeUintegerChecker<uint16_t> ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   147
      .AddAttribute ("TtlThreshold", "Threshold, beyond which TTL = NetDiameter is used for each attempt in RREQ.",
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   148
                     UintegerValue (7),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   149
                     MakeUintegerAccessor (&RoutingProtocol::TtlThreshold),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   150
                     MakeUintegerChecker<uint16_t> ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   151
      .AddAttribute ("LocalAddTtl", "Value used in calculation RREQ TTL when use local repair.",
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   152
                     UintegerValue (7),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   153
                     MakeUintegerAccessor (&RoutingProtocol::LocalAddTtl),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   154
                     MakeUintegerChecker<uint16_t> ())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   155
      .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
   156
                     UintegerValue (64),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   157
                     MakeUintegerAccessor (&RoutingProtocol::MaxQueueLen),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   158
                     MakeUintegerChecker<uint32_t> ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   159
      .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
   160
                     TimeValue (Seconds (30)),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   161
                     MakeTimeAccessor (&RoutingProtocol::MaxQueueTime),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   162
                     MakeTimeChecker ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   163
      .AddAttribute ("AllowedHelloLoss", "Number of hello messages which may be loss for valid link.",
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   164
                     UintegerValue (2),
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   165
                     MakeUintegerAccessor (&RoutingProtocol::AllowedHelloLoss),
5619
bc20c7300bb2 Attributes added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5618
diff changeset
   166
                     MakeUintegerChecker<uint16_t> ())
5654
afab4fbeb34e comments added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5653
diff changeset
   167
      .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
   168
                     BooleanValue (true),
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   169
                     MakeBooleanAccessor (&RoutingProtocol::SetGratuitousReplyFlag,
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   170
                                          &RoutingProtocol::GetGratuitousReplyFlag),
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   171
                     MakeBooleanChecker ())
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   172
      .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
   173
                     BooleanValue (false),
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   174
                     MakeBooleanAccessor (&RoutingProtocol::SetDesinationOnlyFlag,
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   175
                                          &RoutingProtocol::GetDesinationOnlyFlag),
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   176
                     MakeBooleanChecker ())
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   177
      .AddAttribute ("EnableExpandingRingSearch", "Enable expanding ring search technique.",
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
   178
                     BooleanValue (false),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   179
                     MakeBooleanAccessor (&RoutingProtocol::SetExpandingRingSearchEnable,
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   180
                                          &RoutingProtocol::GetExpandingRingSearchEnable),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   181
                     MakeBooleanChecker ())
5654
afab4fbeb34e comments added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5653
diff changeset
   182
      .AddAttribute ("EnableHello", "Indicates whether a hello messages enable.",
5658
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
   183
                     BooleanValue (true),
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   184
                     MakeBooleanAccessor (&RoutingProtocol::SetHelloEnable,
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   185
                                          &RoutingProtocol::GetHelloEnable),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   186
                     MakeBooleanChecker ())
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   187
      .AddAttribute ("EnableLocalRepair", "Enable local repair.",
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   188
                     BooleanValue (true),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   189
                     MakeBooleanAccessor (&RoutingProtocol::SetLocalRepairEnable,
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   190
                                          &RoutingProtocol::GetLocalRepairEnable),
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   191
                     MakeBooleanChecker ())
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   192
  ;
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   193
  return tid;
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   194
}
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   195
RoutingProtocol::~RoutingProtocol ()
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   196
{
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   197
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   198
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   199
void
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   200
RoutingProtocol::DoDispose ()
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   201
{
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   202
  m_ipv4 = 0;
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   203
  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::iterator iter = m_socketAddresses.begin (); iter != m_socketAddresses.end (); iter++)
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   204
  {
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   205
    iter->first->Close ();
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   206
  }
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   207
  m_socketAddresses.clear ();
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   208
  Ipv4RoutingProtocol::DoDispose ();
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   209
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   210
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   211
void
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   212
RoutingProtocol::Start ()
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   213
{
5625
022e4ebc7afd AODV cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5624
diff changeset
   214
  // Open sockets for control traffic on each IP interface
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   215
  const Ipv4Address loopback ("127.0.0.1");
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   216
  for (uint32_t i = 0; i < m_ipv4->GetNInterfaces (); i++)
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   217
  {
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   218
    Ipv4InterfaceAddress iface = m_ipv4->GetAddress (i, 0);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   219
    if (iface.GetLocal () == loopback)
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   220
      continue;
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   221
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   222
    // Create a socket to listen only on this interface
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   223
    Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> ();
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   224
    Ptr<Socket> socket = l3->CreateRawSocket2();
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   225
    NS_ASSERT (socket != 0);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   226
    socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv, this));
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   227
    socket->Bind(InetSocketAddress (iface.GetLocal(), AODV_PORT));
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   228
    socket->Connect (InetSocketAddress (iface.GetBroadcast(), AODV_PORT));
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   229
    m_socketAddresses.insert (std::make_pair (socket, iface));
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   230
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   231
    // Add local broadcast record to the routing table
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   232
    Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (iface.GetLocal ()));
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   233
    RoutingTableEntry rt (/*device=*/dev, /*dst=*/iface.GetBroadcast (), /*know seqno=*/true, /*seqno=*/0, /*iface=*/iface,
5622
aa34a270824c route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5621
diff changeset
   234
                          /*hops=*/1, /*next hop=*/iface.GetBroadcast (), /*lifetime=*/Seconds (1e9)); // TODO use infty
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5594
diff changeset
   235
    m_routingTable.AddRoute (rt);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   236
  }
5601
82c874729b6c queue modified
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5600
diff changeset
   237
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   238
  m_scb = MakeCallback (&RoutingProtocol::Send, this);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   239
  m_ecb = MakeCallback (&RoutingProtocol::Drop, this);
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
   240
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   241
  if (EnableHello)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   242
    {
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   243
      m_nb.ScheduleTimer ();
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   244
    }
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   245
}
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   246
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   247
Ptr<Ipv4Route>
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   248
RoutingProtocol::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr )
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   249
{
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   250
  NS_LOG_FUNCTION (this << p->GetUid() << header.GetDestination());
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   251
  sockerr = Socket::ERROR_NOTERROR;
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   252
  Ptr<Ipv4Route> route;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   253
  Ipv4Address dst = header.GetDestination ();
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
   254
  RoutingTableEntry rt;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   255
  if (m_routingTable.LookupRoute (dst, rt))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   256
    {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   257
      if (rt.GetFlag () == VALID)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   258
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   259
          route = rt.GetRoute ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   260
          NS_ASSERT (route != 0);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   261
          NS_LOG_LOGIC("exist route to " << route->GetDestination() << " from iface " << route->GetSource());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   262
          UpdateRouteLifeTime (dst, ActiveRouteTimeout);
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   263
          UpdateRouteLifeTime (route->GetGateway(), ActiveRouteTimeout);
5658
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
   264
//          m_nb.Update (route->GetGateway(), ActiveRouteTimeout);  //?
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   265
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   266
      else
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   267
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   268
          QueueEntry newEntry (p, header, m_scb, m_ecb);
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   269
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   270
          m_queue.Enqueue (newEntry);
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   271
          if (rt.GetFlag () == INVALID)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   272
            {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   273
              m_routingTable.SetEntryState (dst, IN_SEARCH);
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   274
              if (EnableExpandingRingSearch)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   275
                SendRequest (dst, rt.GetHop () + TtlIncrement);
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   276
              else
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   277
                SendRequest (dst, NetDiameter);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   278
            }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   279
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   280
    }
5578
020a5aa8b40c SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5577
diff changeset
   281
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   282
    {
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   283
      QueueEntry newEntry (p, header, m_scb, m_ecb);
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   284
      m_queue.Enqueue (newEntry);
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   285
      if (EnableExpandingRingSearch)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   286
        SendRequest (dst, TtlStart);
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   287
      else
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   288
        SendRequest (dst, NetDiameter);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   289
    }
5625
022e4ebc7afd AODV cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5624
diff changeset
   290
  return route;
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   291
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   292
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   293
bool
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   294
RoutingProtocol::RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev, UnicastForwardCallback ucb,
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   295
    MulticastForwardCallback mcb, LocalDeliverCallback lcb, ErrorCallback ecb )
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   296
{
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   297
  NS_LOG_FUNCTION (this << p->GetUid() << header.GetDestination() << idev->GetAddress());
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   298
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   299
  NS_ASSERT (m_ipv4 != 0);
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   300
  // Check if input device supports IP
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   301
  NS_ASSERT (m_ipv4->GetInterfaceForDevice (idev) >= 0);
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   302
  int32_t iif = m_ipv4->GetInterfaceForDevice (idev);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   303
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   304
  Ipv4Address dst = header.GetDestination ();
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   305
  Ipv4Address origin = header.GetSource ();
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   306
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   307
  if (IsMyOwnAddress (origin))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   308
    return true;
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   309
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   310
  // Local delivery to AODV interfaces
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   311
  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
   312
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   313
      Ipv4InterfaceAddress iface = j->second;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   314
      if (m_ipv4->GetInterfaceForAddress (iface.GetLocal ()) == iif)
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   315
        if (dst == iface.GetBroadcast ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   316
          {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   317
            if (m_idCache.LookupId (origin, p->GetUid ()))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   318
              {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   319
                NS_LOG_LOGIC("Duplicated packet from " << origin);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   320
                return true;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   321
              }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   322
            m_idCache.InsertId (origin, p->GetUid (), PathDiscoveryTime);
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   323
            UpdateRouteLifeTime (origin, ActiveRouteTimeout);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   324
            NS_LOG_LOGIC ("Broadcast local delivery to " << iface.GetLocal ());
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   325
            Ptr<Packet> packet = p->Copy();
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   326
            lcb (p, header, iif);
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   327
            Ptr<Ipv4Route> route;
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   328
            ucb (route, packet, header);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   329
            return true;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   330
          }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   331
    }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   332
  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   333
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   334
      Ipv4InterfaceAddress iface = j->second;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   335
      if (dst == iface.GetLocal ())
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   336
        {
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   337
          UpdateRouteLifeTime (origin, ActiveRouteTimeout);
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   338
          RoutingTableEntry toOrigin;
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   339
          m_routingTable.LookupRoute (origin, toOrigin);
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   340
          UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout);
5638
1b5112aa7de4 neighbors moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5635
diff changeset
   341
          m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   342
          NS_LOG_LOGIC ("Unicast local delivery to " << iface.GetLocal ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   343
          lcb (p, header, iif);
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   344
          return true;
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   345
        }
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   346
    }
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   347
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   348
  // TODO: local delivery to non-AODV interfaces
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   349
  // Forwarding
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   350
  return Forwarding (p, header, ucb, ecb);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   351
}
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   352
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   353
bool
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   354
RoutingProtocol::Forwarding (Ptr<const Packet> p, const Ipv4Header & header, UnicastForwardCallback ucb, ErrorCallback ecb)
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   355
{
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   356
  Ipv4Address dst = header.GetDestination ();
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   357
  Ipv4Address origin = header.GetSource ();
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   358
  m_routingTable.Purge ();
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   359
  RoutingTableEntry toDst;
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   360
  if (m_routingTable.LookupRoute (dst, toDst))
5622
aa34a270824c route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5621
diff changeset
   361
    {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   362
      if (toDst.GetFlag () == INVALID && EnableLocalRepair && !lrtimer.IsRunning())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   363
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   364
          if (toDst.GetHop () > MaxRepairTtl)
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   365
            return false;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   366
          LocalRouteRepair (dst, origin);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   367
          QueueEntry newEntry (p, header, ucb, ecb, MaxQueueTime);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   368
          m_queue.Enqueue (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   369
          NS_LOG_LOGIC("Local repair "<< dst);
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   370
          return true;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   371
        }
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   372
      else if (toDst.GetFlag () == BEING_REPAIRED)
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   373
        {
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   374
          QueueEntry newEntry (p, header, ucb, ecb, MaxQueueTime);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   375
          m_queue.Enqueue (newEntry);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   376
          return true;
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   377
        }
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   378
      else if (toDst.GetFlag () == VALID)
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   379
        {
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   380
          Ptr<Ipv4Route> route = toDst.GetRoute ();
5655
841e38c18ecf aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5654
diff changeset
   381
          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
   382
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   383
          /**
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   384
           *  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
   385
           *  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
   386
           *  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
   387
           *  time plus ActiveRouteTimeout.
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   388
           */
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   389
          UpdateRouteLifeTime (origin, ActiveRouteTimeout);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   390
          UpdateRouteLifeTime (dst, ActiveRouteTimeout);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   391
          UpdateRouteLifeTime (route->GetGateway (), ActiveRouteTimeout);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   392
          /**
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   393
           *  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
   394
           *  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
   395
           *  to be no less than the current time plus ActiveRouteTimeout
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   396
           */
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   397
          RoutingTableEntry toOrigin;
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   398
          m_routingTable.LookupRoute (origin, toOrigin);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   399
          UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout);
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
   400
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   401
          m_nb.Update (route->GetGateway (), ActiveRouteTimeout); //?
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   402
          m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout);
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   403
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
   404
          NS_LOG_LOGIC ("Forwarding");
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
   405
          m_routingTable.Print(std::cout);
5648
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   406
          ucb (route, p, header);
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   407
          return true;
85aae1523c46 forwarding detached from RouteInput
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5647
diff changeset
   408
        }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   409
    }
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   410
  NS_LOG_LOGIC("route not found to "<< dst);
5578
020a5aa8b40c SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5577
diff changeset
   411
  return false;
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   412
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   413
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   414
void
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   415
RoutingProtocol::SetIpv4 (Ptr<Ipv4> ipv4)
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   416
{
5616
9d22b787ea7c RawSocketImpl::ForwardUp fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5615
diff changeset
   417
  NS_ASSERT (ipv4 != 0);
9d22b787ea7c RawSocketImpl::ForwardUp fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5615
diff changeset
   418
  NS_ASSERT (m_ipv4 == 0);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   419
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   420
  if (EnableLocalRepair)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   421
    {
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   422
      lrtimer.SetFunction (&RoutingProtocol::LocalRepairTimerExpire, this);
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   423
    }
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   424
  if (EnableHello)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   425
    {
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   426
      htimer.SetFunction (&RoutingProtocol::HelloTimerExpire, this);
5654
afab4fbeb34e comments added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5653
diff changeset
   427
      htimer.Schedule(MilliSeconds(UniformVariable().GetValue (0.0, 10.0)));
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   428
    }
5571
b82fbde6cf8d BroadcastIdCache methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5562
diff changeset
   429
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   430
  m_ipv4 = ipv4;
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   431
  Simulator::ScheduleNow (&RoutingProtocol::Start, this);
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   432
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   433
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   434
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   435
RoutingProtocol::NotifyInterfaceUp (uint32_t i )
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   436
{
5666
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   437
  NS_LOG_FUNCTION (this << i);
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   438
  Ipv4InterfaceAddress iface = m_ipv4->GetAddress (i, 0);
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   439
  if (iface.GetLocal () == Ipv4Address ("127.0.0.1"))
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   440
    return;
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   441
  // Create a socket to listen only on this interface
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   442
  Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> ();
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   443
  Ptr<Socket> socket = l3->CreateRawSocket2();
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   444
  NS_ASSERT (socket != 0);
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   445
  socket->SetRecvCallback (MakeCallback (&RoutingProtocol::RecvAodv, this));
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   446
  socket->Bind(InetSocketAddress (iface.GetLocal(), AODV_PORT));
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   447
  socket->Connect (InetSocketAddress (iface.GetBroadcast(), AODV_PORT));
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   448
  m_socketAddresses.insert (std::make_pair (socket, iface));
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   449
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   450
  // Add local broadcast record to the routing table
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   451
  Ptr<NetDevice> dev = m_ipv4->GetNetDevice (m_ipv4->GetInterfaceForAddress (iface.GetLocal ()));
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   452
  RoutingTableEntry rt (/*device=*/dev, /*dst=*/iface.GetBroadcast (), /*know seqno=*/true, /*seqno=*/0, /*iface=*/iface,
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   453
                        /*hops=*/1, /*next hop=*/iface.GetBroadcast (), /*lifetime=*/Seconds (1e9)); // TODO use infty
e22f5d735495 RoutingProtocol::NotifyInterfaceUp added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5665
diff changeset
   454
  m_routingTable.AddRoute (rt);
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   455
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   456
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   457
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   458
RoutingProtocol::NotifyInterfaceDown (uint32_t i )
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   459
{
5569
0b63a5534a66 AODV logs
Pavel Boyko <boyko@iitp.ru>
parents: 5562
diff changeset
   460
  NS_LOG_FUNCTION (this << m_ipv4->GetAddress (i, 0).GetLocal ());
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
   461
//  Ptr<Socket> socket = FindSocketWithInterfaceAddress (m_ipv4->GetAddress (i, 0));
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
   462
//  m_socketAddresses.erase (socket);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
   463
//  m_routingTable.DeleteAllRouteFromInterface (m_ipv4->GetAddress (i, 0));
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   464
  // TODO
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   465
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   466
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   467
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   468
RoutingProtocol::NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address )
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   469
{
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   470
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   471
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   472
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   473
RoutingProtocol::NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address )
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   474
{
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   475
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   476
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   477
bool
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   478
RoutingProtocol::IsMyOwnAddress (Ipv4Address src )
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   479
{
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   480
  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j = m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   481
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   482
      Ipv4InterfaceAddress iface = j->second;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   483
      if (src == iface.GetLocal ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   484
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   485
          return true;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   486
        }
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   487
    }
5594
106389f6d383 Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents: 5593
diff changeset
   488
  return false;
106389f6d383 Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents: 5593
diff changeset
   489
}
106389f6d383 Duplicate detection fixed in RREQ forwarding
Pavel Boyko <boyko@iitp.ru>
parents: 5593
diff changeset
   490
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   491
void
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   492
RoutingProtocol::SendRequest (Ipv4Address dst, uint16_t ttl)
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   493
{
5614
e4ac62d42079 BuildHeader added + support of raw socket in ipv4-l3-protol added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5613
diff changeset
   494
  NS_LOG_FUNCTION ( this << dst);
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   495
  // Create RREQ header
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   496
  RreqHeader rreqHeader;
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   497
  rreqHeader.SetDst (dst);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   498
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   499
  RoutingTableEntry rt;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   500
  if (m_routingTable.LookupRoute (dst, rt))
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
   501
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   502
      rreqHeader.SetHopCount (rt.GetHop ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   503
      if (rt.GetValidSeqNo ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   504
        rreqHeader.SetDstSeqno (rt.GetSeqNo ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   505
      else
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   506
        rreqHeader.SetUnknownSeqno (true);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   507
    }
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   508
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   509
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   510
      Ptr<NetDevice> dev;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   511
      rreqHeader.SetUnknownSeqno (true);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   512
      RoutingTableEntry newEntry (dev, dst, false, 0, Ipv4InterfaceAddress (), 0, Ipv4Address (), Seconds (0));
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   513
      newEntry.SetFlag (IN_SEARCH);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   514
      m_routingTable.AddRoute (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   515
    }
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   516
5634
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   517
  if (GratuitousReply)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   518
    rreqHeader.SetGratiousRrep (true);
5634
0638143639ad D and G flags moved in protocol parameters
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5632
diff changeset
   519
  if (DestinationOnly)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   520
    rreqHeader.SetDestinationOnly (true);
5601
82c874729b6c queue modified
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5600
diff changeset
   521
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5594
diff changeset
   522
  m_seqNo++;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   523
  rreqHeader.SetOriginSeqno (m_seqNo);
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   524
  m_requestId++;
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   525
  rreqHeader.SetId (m_requestId);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   526
  rreqHeader.SetHopCount (0);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   527
5625
022e4ebc7afd AODV cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5624
diff changeset
   528
  // Send RREQ as subnet directed broadcast from each interface used by aodv
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   529
  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
   530
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   531
      Ptr<Socket> socket = j->first;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   532
      Ipv4InterfaceAddress iface = j->second;
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   533
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   534
      rreqHeader.SetOrigin (iface.GetLocal ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   535
      m_idCache.InsertId (iface.GetLocal (), m_requestId, PathDiscoveryTime);
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   536
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   537
      Ptr<Packet> packet = Create<Packet> ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   538
      packet->AddHeader (rreqHeader);
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   539
      TypeHeader tHeader (AODVTYPE_RREQ);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   540
      packet->AddHeader (tHeader);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   541
      SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ *j, /*dst*/iface.GetBroadcast (), /*TTL*/ ttl, /*id*/0);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   542
    }
5641
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   543
  ScheduleRreqRetry (dst, ttl);
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   544
  if (EnableHello)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   545
    {
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   546
      htimer.Cancel ();
5654
afab4fbeb34e comments added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5653
diff changeset
   547
      htimer.Schedule (HelloInterval - Scalar(0.01)*MilliSeconds(UniformVariable().GetValue (0, 10)));
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   548
    }
5582
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   549
}
f0fbbf302782 RREQ reveived
Pavel Boyko <boyko@iitp.ru>
parents: 5581
diff changeset
   550
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   551
void
5641
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   552
RoutingProtocol::ScheduleRreqRetry (Ipv4Address dst,  uint16_t ttl)
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   553
{
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   554
  if (m_addressReqTimer.find (dst) == m_addressReqTimer.end ())
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   555
     {
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   556
       Timer timer (Timer::CANCEL_ON_DESTROY);
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   557
       m_addressReqTimer[dst] = timer;
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   558
     }
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   559
   m_addressReqTimer[dst].SetFunction (&RoutingProtocol::RouteRequestTimerExpire, this);
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   560
   m_addressReqTimer[dst].Cancel ();
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   561
   m_addressReqTimer[dst].SetArguments (dst, ttl);
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   562
   RoutingTableEntry rt;
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   563
   m_routingTable.LookupRoute (dst, rt);
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   564
   if (ttl == NetDiameter)
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   565
     {
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   566
       rt.IncrementRreqCnt ();
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   567
       m_routingTable.Update (rt);
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   568
       m_addressReqTimer[dst].Schedule (Scalar (rt.GetRreqCnt ()) * NetTraversalTime);
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   569
     }
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   570
   else
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   571
     m_addressReqTimer[dst].Schedule (Scalar (2) * NodeTraversalTime * Scalar (ttl + TimeoutBuffer));
5641
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   572
}
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   573
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   574
3e119b71a445 neighbor's timer moved in class Neighbors
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5639
diff changeset
   575
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   576
RoutingProtocol::RecvAodv (Ptr<Socket> socket )
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   577
{
5579
da52238214c8 raw socket
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5578
diff changeset
   578
  NS_LOG_FUNCTION (this);
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   579
  Address sourceAddress;
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   580
  Ptr<Packet> packet = socket->RecvFrom (sourceAddress);
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   581
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   582
  Ipv4Header ipv4Header;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   583
  packet->RemoveHeader (ipv4Header);
5578
020a5aa8b40c SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5577
diff changeset
   584
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   585
  UdpHeader udpHeader;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   586
  packet->RemoveHeader (udpHeader);
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   587
  NS_ASSERT (udpHeader.GetDestinationPort () == AODV_PORT);
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   588
  NS_ASSERT (udpHeader.GetSourcePort () == AODV_PORT);
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   589
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   590
  Ipv4Address receiver = m_socketAddresses[socket].GetLocal ();
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   591
  Ipv4Address sender = ipv4Header.GetSource ();
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   592
  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
   593
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   594
  UpdateRouteToNeighbor (sender, receiver);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   595
  TypeHeader tHeader (AODVTYPE_RREQ);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   596
  packet->RemoveHeader (tHeader);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   597
  if (!tHeader.IsValid ())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   598
    {
5659
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   599
      NS_LOG_WARN ("AODV message " << packet->GetUid() << " with unknown type received: " << tHeader.Get());
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   600
      return; // drop
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   601
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   602
  switch (tHeader.Get ())
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   603
    {
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   604
    case AODVTYPE_RREQ:
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   605
      {
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   606
        RecvRequest (packet, receiver, sender, ipv4Header);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   607
        break;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   608
      }
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   609
    case AODVTYPE_RREP:
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   610
      {
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   611
        RecvReply (packet, receiver, sender, ipv4Header);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   612
        break;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   613
      }
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   614
    case AODVTYPE_RERR:
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   615
      {
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   616
        RecvError (packet, sender);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   617
        break;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   618
      }
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   619
    case AODVTYPE_RREP_ACK:
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   620
      {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   621
        RecvReplyAck (sender);
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   622
        break;
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   623
      }
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   624
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   625
}
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   626
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   627
bool
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   628
RoutingProtocol::UpdateRouteLifeTime (Ipv4Address addr, Time lifetime )
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   629
{
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   630
  RoutingTableEntry rt;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   631
  if (m_routingTable.LookupRoute (addr, rt))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   632
    {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   633
      rt.SetFlag (VALID);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   634
      rt.SetRreqCnt (0);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   635
      rt.SetLifeTime (std::max (lifetime, rt.GetLifeTime ()));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   636
      m_routingTable.Update (rt);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   637
      return true;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   638
    }
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   639
  return false;
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   640
}
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
   641
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   642
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   643
RoutingProtocol::UpdateRouteToNeighbor (Ipv4Address sender, Ipv4Address receiver )
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   644
{
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   645
  NS_LOG_FUNCTION (this << "sender " << sender << " receiver " << receiver );
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   646
  RoutingTableEntry toNeighbor;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   647
  if (!m_routingTable.LookupRoute (sender, toNeighbor))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   648
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   649
      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
   650
      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
   651
                                  /*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
   652
                                  /*hops=*/1, /*next hop=*/sender, /*lifetime=*/ActiveRouteTimeout);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   653
      m_routingTable.AddRoute (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   654
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   655
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   656
    {
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
   657
      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
   658
      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
   659
                                  /*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
   660
                                  /*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
   661
      m_routingTable.Update (newEntry);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   662
    }
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   663
}
5578
020a5aa8b40c SendRequeat in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5577
diff changeset
   664
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   665
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   666
RoutingProtocol::RecvRequest (Ptr<Packet> p, Ipv4Address receiver, Ipv4Address src, Ipv4Header ipv4Header )
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   667
{
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   668
  NS_LOG_FUNCTION (this);
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
   669
  RreqHeader rreqHeader;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   670
  p->RemoveHeader (rreqHeader); // TODO check that header correctly found
5621
e6e336252f25 finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5619
diff changeset
   671
e6e336252f25 finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5619
diff changeset
   672
  // 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
   673
  RoutingTableEntry toPrev;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   674
  if (m_routingTable.LookupRoute (src, toPrev))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   675
    {
5632
0603bb7b561b unit tests updated
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5629
diff changeset
   676
      if (toPrev.IsUnidirectional ())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   677
        return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   678
    }
5621
e6e336252f25 finding duplicated broadcast packet by packet uid
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5619
diff changeset
   679
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   680
  uint32_t id = rreqHeader.GetId ();
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   681
  Ipv4Address origin = rreqHeader.GetOrigin ();
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
   682
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   683
  /*
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   684
   *  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
   685
   *  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
   686
   */
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   687
  if (m_idCache.LookupId (origin, id))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   688
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   689
      return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   690
    }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   691
  m_idCache.InsertId (origin, id, PathDiscoveryTime);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   692
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   693
  // Increment RREQ hop count
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   694
  uint8_t hop = rreqHeader.GetHopCount () + 1;
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   695
  rreqHeader.SetHopCount (hop);
5584
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
   696
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   697
  /*
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   698
   *  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
   699
   *  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
   700
   *     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
   701
   *  2. the valid sequence number field is set to true;
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   702
   *  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
   703
   *  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
   704
   *  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
   705
   *     MinimalLifetime = current time + 2*NetTraversalTime - 2*HopCount*NodeTraversalTime
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   706
   */
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   707
  RoutingTableEntry toOrigin;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   708
  if (!m_routingTable.LookupRoute (origin, toOrigin))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   709
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   710
      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
   711
      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
   712
                                  /*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0), /*hops=*/hop,
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   713
                                  /*nextHop*/src, /*timeLife=*/Scalar (2) * NetTraversalTime - Scalar (2 * hop) * NodeTraversalTime);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   714
      m_routingTable.AddRoute (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   715
    }
5599
5069c4c46ddb SendReplyByIntermediateNode added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5598
diff changeset
   716
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   717
    {
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   718
      if (toOrigin.GetValidSeqNo ())
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   719
        {
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   720
          if (int32_t (rreqHeader.GetOriginSeqno ()) - int32_t (toOrigin.GetSeqNo ()) > 0)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   721
            toOrigin.SetSeqNo (rreqHeader.GetOriginSeqno ());
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   722
        }
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   723
      else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   724
        toOrigin.SetSeqNo (rreqHeader.GetOriginSeqno ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   725
      toOrigin.SetValidSeqNo (true);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   726
      toOrigin.SetNextHop (src);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   727
      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
   728
      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
   729
      toOrigin.SetHop (hop);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   730
      toOrigin.SetLifeTime (std::max (Scalar (2) * NetTraversalTime - Scalar (2 * hop) * NodeTraversalTime, toOrigin.GetLifeTime ()));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   731
      m_routingTable.Update (toOrigin);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   732
    }
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
   733
5655
841e38c18ecf aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5654
diff changeset
   734
  NS_LOG_LOGIC ("After recieve request");
841e38c18ecf aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5654
diff changeset
   735
  m_routingTable.Print (std::cout);
841e38c18ecf aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5654
diff changeset
   736
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
   737
  //  A node generates a RREP if either:
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   738
  //  (i)  it is itself the destination,
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   739
  if (IsMyOwnAddress (rreqHeader.GetDst ()))
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   740
    {
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   741
      m_routingTable.LookupRoute (origin, toOrigin);
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   742
      SendReply (rreqHeader, toOrigin);
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   743
      return;
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   744
    }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   745
  /*
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   746
   * (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
   747
   *      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
   748
   */
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   749
  RoutingTableEntry toDst;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   750
  Ipv4Address dst = rreqHeader.GetDst ();
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
   751
  NS_LOG_LOGIC (receiver << " recieve RREQ to destination " << dst << " with ttl " << (uint16_t) ipv4Header.GetTtl ());
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   752
  if (m_routingTable.LookupRoute (dst, toDst))
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
   753
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   754
      /*
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   755
       * 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
   756
       * 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
   757
       * 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
   758
       * 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
   759
       */
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   760
      if (rreqHeader.GetUnknownSeqno () || ( (int32_t (toDst.GetSeqNo ()) - int32_t (rreqHeader.GetDstSeqno ()) > 0) && toDst.GetValidSeqNo () ))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   761
        {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   762
          if (!rreqHeader.GetDestinationOnly () && toDst.GetFlag() == VALID)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   763
            {
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
   764
              m_routingTable.LookupRoute (origin, toOrigin);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   765
              SendReplyByIntermediateNode (toDst, toOrigin, rreqHeader.GetGratiousRrep ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   766
              return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   767
            }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   768
          rreqHeader.SetDstSeqno (toDst.GetSeqNo ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   769
          rreqHeader.SetUnknownSeqno (false);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   770
        }
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
   771
    }
5655
841e38c18ecf aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5654
diff changeset
   772
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   773
  /*
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   774
   * If a node does not generate a RREP the incoming IP header has TTL larger than 1, the node updates
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   775
   * and broadcasts the RREQ on each of its configured interfaces.
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   776
   */
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
   777
  if (ipv4Header.GetTtl () < 2)
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
   778
    return;
5618
7a2006fc4a04 sending broadcast aodv packet fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5617
diff changeset
   779
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
   780
  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
   781
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   782
      Ptr<Socket> socket = j->first;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   783
      Ipv4InterfaceAddress iface = j->second;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   784
      Ptr<Packet> packet = p->Copy ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   785
      packet->AddHeader (rreqHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   786
      TypeHeader tHeader (AODVTYPE_RREQ);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   787
      packet->AddHeader (tHeader);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   788
      SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ *j, /*dst*/iface.GetBroadcast (),
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
   789
                               /*TTL*/ ipv4Header.GetTtl () - 1, /*id*/ipv4Header.GetIdentification ());
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   790
    }
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   791
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   792
  if (EnableHello)
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   793
    {
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   794
      htimer.Cancel ();
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
   795
      htimer.Schedule (HelloInterval - Scalar(0.1)*MilliSeconds(UniformVariable().GetValue (0.0, 10.0)));
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
   796
    }
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   797
}
5573
040121bb814c BroadcastId methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5572
diff changeset
   798
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   799
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   800
RoutingProtocol::SendReply (RreqHeader const & rreqHeader, RoutingTableEntry const & toOrigin )
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   801
{
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   802
  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
   803
  /*
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
   804
   * 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
   805
   * 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
   806
   */
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   807
  if (!rreqHeader.GetUnknownSeqno () && (rreqHeader.GetDstSeqno () == m_seqNo + 1))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   808
    m_seqNo++;
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
   809
  RrepHeader rrepHeader ( /*prefixSize=*/0, /*hops=*/toOrigin.GetHop (), /*dst=*/rreqHeader.GetDst (),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   810
  /*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
   811
  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
   812
  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
   813
  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
   814
  packet->AddHeader (tHeader);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   815
  Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ());
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
   816
  NS_ASSERT (socket);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   817
  SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toOrigin.GetInterface ()),
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
   818
                           /*dst*/toOrigin.GetNextHop (), /*TTL*/ toOrigin.GetHop (), /*id*/0);
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
   819
}
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
   820
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
   821
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   822
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
   823
{
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
   824
  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
   825
  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
   826
                         /*origin=*/toOrigin.GetDestination (), /*lifetime=*/toDst.GetLifeTime ());
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
   827
  /* 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
   828
   * 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
   829
   */
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
   830
  if (toDst.GetHop () == 1)
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
   831
    {
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
   832
      rrepHeader.SetAckRequired (true);
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
   833
      RoutingTableEntry toNextHop;
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
   834
      m_routingTable.LookupRoute (toOrigin.GetNextHop (), toNextHop);
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
   835
      toNextHop.m_ackTimer.SetFunction (&RoutingProtocol::AckTimerExpire, this);
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
   836
      toNextHop.m_ackTimer.SetArguments (toNextHop.GetDestination (), BlackListTimeout);
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
   837
      toNextHop.m_ackTimer.SetDelay (NextHopWait);
a50bf07ed462 heuristics of RREP_ACK needs added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5655
diff changeset
   838
    }
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
   839
  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
   840
  toOrigin.InsertPrecursor (toDst.GetNextHop ());
5627
3fb6bda728ad unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5626
diff changeset
   841
  m_routingTable.Update (toDst);
3fb6bda728ad unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5626
diff changeset
   842
  m_routingTable.Update (toOrigin);
5587
7441c907cdee header flags fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   843
5583
584f9c12e48f AODV protocol in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5582
diff changeset
   844
  Ptr<Packet> packet = Create<Packet> ();
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   845
  packet->AddHeader (rrepHeader);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   846
  TypeHeader tHeader (AODVTYPE_RREP);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   847
  packet->AddHeader (tHeader);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   848
  Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ());
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
   849
  m_routingTable.Print(std::cout);
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
   850
  NS_ASSERT (socket);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   851
  SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toOrigin.GetInterface ()),
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
   852
                           /*dst*/toOrigin.GetNextHop (), /*TTL*/ toOrigin.GetHop (), /*id*/0);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
   853
5610
88070a214cb7 Send aodv control traffic to the next hop rather then to the destination.
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5609
diff changeset
   854
  // 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
   855
  if (gratRep)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   856
    {
5659
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   857
      RrepHeader gratRepHeader (/*prefix size=*/0, /*hops=*/toOrigin.GetHop (), /*dst=*/toOrigin.GetDestination (), /*dst seqno=*/toOrigin.GetSeqNo (),
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   858
          /*origin=*/toDst.GetDestination (), /*lifetime=*/toOrigin.GetLifeTime ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   859
      Ptr<Packet> packetToDst = Create<Packet> ();
5659
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   860
      packetToDst->AddHeader (gratRepHeader);
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   861
      TypeHeader type (AODVTYPE_RREP);
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   862
      packetToDst->AddHeader (type);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   863
      Ptr<Socket> socket = FindSocketWithInterfaceAddress (toDst.GetInterface ());
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
   864
      NS_ASSERT (socket);
5659
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   865
      NS_LOG_LOGIC ("Send gratuitous RREP " << packet->GetUid());
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   866
      SendPacketViaRawSocket (/*packet*/packetToDst, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toDst.GetInterface ()),
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
   867
                               /*dst*/toDst.GetNextHop (), /*TTL*/ toDst.GetHop (), /*id*/0);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   868
    }
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   869
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   870
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   871
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   872
RoutingProtocol::SendReplyAck (Ipv4Address neighbor )
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   873
{
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   874
  NS_LOG_FUNCTION(this);
5611
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   875
  RrepAckHeader h;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   876
  TypeHeader typeHeader (AODVTYPE_RREP_ACK);
5611
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   877
  Ptr<Packet> packet = Create<Packet> ();
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   878
  packet->AddHeader (h);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   879
  packet->AddHeader (typeHeader);
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   880
  RoutingTableEntry toNeighbor;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   881
  m_routingTable.LookupRoute (neighbor, toNeighbor);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   882
  Ptr<Socket> socket = FindSocketWithInterfaceAddress (toNeighbor.GetInterface ());
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
   883
  NS_ASSERT (socket);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   884
  SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toNeighbor.GetInterface ()),
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
   885
                           /*dst*/neighbor, /*TTL*/ 1, /*id*/0);
5611
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   886
}
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   887
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   888
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   889
RoutingProtocol::RecvReply (Ptr<Packet> p, Ipv4Address receiver, Ipv4Address sender, Ipv4Header ipv4Header )
5611
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   890
{
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   891
  NS_LOG_FUNCTION(this << " src " << sender);
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
   892
  RrepHeader rrepHeader;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   893
  p->RemoveHeader (rrepHeader);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   894
  Ipv4Address dst = rrepHeader.GetDst ();
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
   895
  NS_LOG_LOGIC("RREP destination " << dst << " RREP origin " << rrepHeader.GetOrigin());
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
   896
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   897
  uint8_t hop = rrepHeader.GetHopCount () + 1;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   898
  rrepHeader.SetHopCount (hop);
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
   899
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
   900
  // If RREP is Hello message
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
   901
  if (dst == rrepHeader.GetOrigin ())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   902
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   903
      ProcessHello (rrepHeader, receiver);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   904
      return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   905
    }
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
   906
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   907
  if (dst == m_repairedDst)
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   908
    {
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   909
    RoutingTableEntry toDst;
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   910
    m_routingTable.LookupRoute (dst, toDst);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   911
    if (toDst.GetHop () < rrepHeader.GetHopCount ())
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   912
        {
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   913
          lrtimer.Cancel ();
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   914
          m_repairedDst = Ipv4Address ();
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   915
          SendRerr (dst, true);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   916
        }
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   917
    }
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   918
5611
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   919
  /*
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   920
   * 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
   921
   * -  the route is marked as active,
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   922
   * -  the destination sequence number is marked as valid,
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   923
   * -  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
   924
   *    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
   925
   * -  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
   926
   * -  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
   927
   * -  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
   928
   */
f051337ca99d SendRouteReplyAck() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5610
diff changeset
   929
  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
   930
  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
   931
                              /*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
   932
                              /*nextHop=*/sender, /*lifeTime=*/rrepHeader.GetLifeTime ());
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   933
  RoutingTableEntry toDst;
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
   934
  if (m_routingTable.LookupRoute (dst, toDst))
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
   935
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   936
      /*
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   937
       * 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
   938
       * (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
   939
       */
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   940
      if (!toDst.GetValidSeqNo ())
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   941
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   942
          m_routingTable.Update (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   943
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   944
      // (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
   945
      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
   946
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   947
          m_routingTable.Update (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   948
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   949
      else
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
          // (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
   952
          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
   953
            {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   954
              m_routingTable.Update (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   955
            }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   956
          // (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
   957
          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
   958
            {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   959
              m_routingTable.Update (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   960
            }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   961
        }
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
   962
    }
5601
82c874729b6c queue modified
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5600
diff changeset
   963
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   964
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   965
      // The forward route for this destination is created if it does not already exist.
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   966
      NS_LOG_LOGIC("add new route");
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   967
      m_routingTable.AddRoute (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   968
    }
5655
841e38c18ecf aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5654
diff changeset
   969
  NS_LOG_LOGIC ("After receive RREP");
841e38c18ecf aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5654
diff changeset
   970
  m_routingTable.Print(std::cout);
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
   971
  // 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
   972
  if (rrepHeader.GetAckRequired ())
5659
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   973
    {
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   974
      SendReplyAck (sender);
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   975
      rrepHeader.SetAckRequired (false);
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
   976
    }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   977
  NS_LOG_LOGIC ("receiver " << receiver << " origin " << rrepHeader.GetOrigin ());
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
   978
  if (IsMyOwnAddress (rrepHeader.GetOrigin ()))
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
   979
    {
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
   980
      if (toDst.GetFlag () == IN_SEARCH)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   981
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   982
          m_routingTable.Update (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   983
          m_addressReqTimer[dst].Cancel ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   984
          m_addressReqTimer.erase (dst);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   985
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   986
      SendPacketFromQueue (rrepHeader.GetDst (), newEntry.GetRoute ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   987
      return;
5623
8c5b97aff720 expanding ring search added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5622
diff changeset
   988
    }
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
   989
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
   990
  RoutingTableEntry toOrigin;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   991
  if (!m_routingTable.LookupRoute (rrepHeader.GetOrigin (), toOrigin))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   992
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   993
      return; // Impossible! drop.
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   994
    }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
   995
  toOrigin.SetLifeTime (std::max (ActiveRouteTimeout, toOrigin.GetLifeTime ()));
5627
3fb6bda728ad unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5626
diff changeset
   996
  m_routingTable.Update (toOrigin);
5622
aa34a270824c route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5621
diff changeset
   997
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
   998
  // Update information about precursors
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
   999
  m_routingTable.LookupRoute (rrepHeader.GetDst (), toDst);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1000
  toDst.InsertPrecursor (toOrigin.GetNextHop ());
5627
3fb6bda728ad unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5626
diff changeset
  1001
  m_routingTable.Update (toDst);
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1002
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1003
  RoutingTableEntry toNextHopToDst;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1004
  m_routingTable.LookupRoute (toDst.GetNextHop (), toNextHopToDst);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1005
  toNextHopToDst.InsertPrecursor (toOrigin.GetNextHop ());
5627
3fb6bda728ad unit test for routing table updated
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5626
diff changeset
  1006
  m_routingTable.Update (toNextHopToDst);
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
  1007
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1008
  toOrigin.InsertPrecursor (toDst.GetNextHop ());
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1009
  m_routingTable.Update (toOrigin);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1010
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1011
  RoutingTableEntry toNextHopToOrigin;
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1012
  m_routingTable.LookupRoute (toOrigin.GetNextHop (), toNextHopToOrigin);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1013
  toNextHopToOrigin.InsertPrecursor (toDst.GetNextHop ());
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1014
  m_routingTable.Update (toNextHopToOrigin);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1015
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5590
diff changeset
  1016
  Ptr<Packet> packet = Create<Packet> ();
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1017
  packet->AddHeader (rrepHeader);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1018
  TypeHeader tHeader (AODVTYPE_RREP);
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1019
  packet->AddHeader (tHeader);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1020
  Ptr<Socket> socket = FindSocketWithInterfaceAddress (toOrigin.GetInterface ());
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1021
  NS_ASSERT (socket);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1022
  SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toOrigin.GetInterface ()),
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1023
                           /*dst*/toOrigin.GetNextHop (), /*TTL*/ ipv4Header.GetTtl () - 1, /*id*/0);
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1024
}
5586
18b0f80bbab7 RecvReply fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5584
diff changeset
  1025
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1026
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1027
RoutingProtocol::RecvReplyAck (Ipv4Address neighbor )
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1028
{
5615
85bb591dc8ad routing table changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5614
diff changeset
  1029
  NS_LOG_LOGIC(this);
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1030
  // TODO
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1031
}
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1032
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1033
// TODO may be used for determining connectivity
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1034
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1035
RoutingProtocol::ProcessHello (RrepHeader const & rrepHeader, Ipv4Address receiver )
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1036
{
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
  1037
  NS_LOG_FUNCTION(this << "from " << rrepHeader.GetDst ());
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1038
  /*
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1039
   *  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
  1040
   * 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
  1041
   * create one if necessary.
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1042
   */
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1043
  RoutingTableEntry toNeighbor;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1044
  if (!m_routingTable.LookupRoute (rrepHeader.GetDst (), toNeighbor))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1045
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1046
      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
  1047
      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
  1048
                                  /*iface=*/m_ipv4->GetAddress (m_ipv4->GetInterfaceForAddress (receiver), 0),
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
  1049
                                  /*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
  1050
      m_routingTable.AddRoute (newEntry);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1051
    }
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1052
  else
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1053
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1054
      toNeighbor.SetLifeTime (std::max (Scalar (AllowedHelloLoss) * HelloInterval, toNeighbor.GetLifeTime ()));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1055
      toNeighbor.SetSeqNo (rrepHeader.GetDstSeqno ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1056
      toNeighbor.SetValidSeqNo (true);
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1057
      toNeighbor.SetFlag (VALID);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1058
      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
  1059
      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
  1060
      m_routingTable.Update (toNeighbor);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1061
    }
5658
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
  1062
  if (EnableHello)
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
  1063
    {
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
  1064
      m_nb.Update (rrepHeader.GetDst (), Scalar (AllowedHelloLoss) * HelloInterval);
b4e2a9fa80dc aodv script changed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5657
diff changeset
  1065
    }
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
  1066
}
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
  1067
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1068
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1069
RoutingProtocol::RecvError (Ptr<Packet> p, Ipv4Address src )
5560
bf790e14f13f aodv::RoutingProtocol just added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
  1070
{
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1071
  NS_LOG_FUNCTION (this << " from " << src);
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
  1072
  RerrHeader rerrHeader;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1073
  p->RemoveHeader (rerrHeader);
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1074
  bool noDelete = rerrHeader.GetNoDelete ();
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1075
  if (noDelete)
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1076
    {
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1077
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1078
    }
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1079
  std::map<Ipv4Address, uint32_t> dstWithNextHopSrc;
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1080
  std::map<Ipv4Address, uint32_t> unreachable;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1081
  m_routingTable.GetListOfDestinationWithNextHop (src, dstWithNextHopSrc);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1082
  std::pair<Ipv4Address, uint32_t> un;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1083
  while (rerrHeader.RemoveUnDestination (un))
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1084
    {
5638
1b5112aa7de4 neighbors moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5635
diff changeset
  1085
      if (m_nb.IsNeighbor (un.first))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1086
        SendRerrWhenBreaksLinkToNextHop (un.first);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1087
      else
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1088
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1089
          for (std::map<Ipv4Address, uint32_t>::const_iterator i = dstWithNextHopSrc.begin (); i != dstWithNextHopSrc.end (); ++i)
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1090
            if (i->first == un.first)
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1091
              unreachable.insert (un);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1092
        }
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1093
    }
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1094
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1095
  std::vector<Ipv4Address> precursors;
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1096
  for (std::map<Ipv4Address, uint32_t>::const_iterator i = unreachable.begin (); i != unreachable.end ();)
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1097
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1098
      if (!rerrHeader.AddUnDestination (i->first, i->second))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1099
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1100
          TypeHeader typeHeader (AODVTYPE_RERR);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1101
          Ptr<Packet> packet = Create<Packet> ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1102
          packet->AddHeader (rerrHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1103
          packet->AddHeader (typeHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1104
          SendRerrMessage (packet, precursors);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1105
          rerrHeader.Clear ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1106
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1107
      else
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1108
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1109
          RoutingTableEntry toDst;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1110
          m_routingTable.LookupRoute (i->first, toDst);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1111
          toDst.GetPrecursors (precursors);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1112
          ++i;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1113
        }
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1114
    }
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1115
  if (!noDelete)
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1116
    m_routingTable.InvalidateRoutesWithDst (unreachable);
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1117
  NS_LOG_LOGIC ("After receive RERR");
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1118
  m_routingTable.Print (std::cout);
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1119
}
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1120
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1121
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1122
RoutingProtocol::RouteRequestTimerExpire (Ipv4Address dst, uint16_t lastTtl )
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1123
{
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1124
  NS_LOG_LOGIC(this);
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1125
  RoutingTableEntry toDst;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1126
  m_routingTable.LookupRoute (dst, toDst);
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1127
  if (toDst.GetFlag () == VALID)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1128
    {
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1129
      SendPacketFromQueue (dst, toDst.GetRoute ());
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1130
      NS_LOG_LOGIC ("route to " << dst << " found");
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1131
      return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1132
    }
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1133
  /**
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1134
   *  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
  1135
   *  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
  1136
   *  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
  1137
   */
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1138
  if (toDst.GetRreqCnt () == RreqRetries)
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1139
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1140
      NS_LOG_LOGIC("route discovery to " << dst << " has been attempted RreqRetries times");
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1141
      m_addressReqTimer.erase(dst);
5654
afab4fbeb34e comments added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5653
diff changeset
  1142
      m_routingTable.DeleteRoute(dst);
5639
f39f45cddd86 unit test for neighbors added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5638
diff changeset
  1143
      NS_LOG_LOGIC ("Route not found. Drop packet with dst " << dst);
5660
ed22e758b5f5 RoutingProtocol::DropFromQueue killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5659
diff changeset
  1144
      m_queue.DropPacketWithDst(dst);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1145
      return;
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1146
    }
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1147
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1148
  if (toDst.GetFlag () == IN_SEARCH)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1149
    {
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1150
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1151
      if (lastTtl + TtlIncrement > TtlThreshold)
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1152
        {
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1153
          NS_LOG_LOGIC ("Send new RREQ to " << dst << " ttl " << NetDiameter);
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1154
          SendRequest (dst, NetDiameter);
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1155
        }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1156
      else
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1157
        {
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1158
          NS_LOG_LOGIC ("Send new RREQ to " << dst << " ttl " << lastTtl + TtlIncrement);
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1159
          SendRequest (dst, lastTtl + TtlIncrement);
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1160
        }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1161
    }
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1162
  else
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1163
    {
5639
f39f45cddd86 unit test for neighbors added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5638
diff changeset
  1164
      NS_LOG_LOGIC ("Route down. Stop search. Drop packet with destination " << dst);
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1165
      m_addressReqTimer.erase(dst);
5654
afab4fbeb34e comments added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5653
diff changeset
  1166
      m_routingTable.DeleteRoute(dst);
5660
ed22e758b5f5 RoutingProtocol::DropFromQueue killed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5659
diff changeset
  1167
      m_queue.DropPacketWithDst(dst);
5635
41c9c1b2008d logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5634
diff changeset
  1168
    }
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1169
}
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1170
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1171
void
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1172
RoutingProtocol::HelloTimerExpire ()
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1173
{
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
  1174
  NS_LOG_FUNCTION(this);
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1175
  SendHello ();
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1176
  // TODO select random time for the next hello
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1177
  htimer.Cancel ();
5659
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1178
  Time t = Scalar(0.001)*MilliSeconds(UniformVariable().GetValue (0.0, 100.0));
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1179
  NS_LOG_LOGIC ("delay = " << t.GetMicroSeconds ());
af1e766370c6 sending gratuitous RREP + AckRequired flag control corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5658
diff changeset
  1180
  htimer.Schedule (HelloInterval - t);
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1181
}
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1182
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1183
void
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1184
RoutingProtocol::LocalRepairTimerExpire ()
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1185
{
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1186
  NS_LOG_LOGIC ("Local repair failed. Drop packet with destination IP address " << m_repairedDst << " and send RERR message");
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1187
  m_queue.DropPacketWithDst (m_repairedDst);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1188
  SendRerr (m_repairedDst, false);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1189
  RoutingTableEntry toDst;
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1190
  m_routingTable.SetEntryState (m_repairedDst, INVALID);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1191
  m_repairedDst = Ipv4Address ();
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1192
}
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1193
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1194
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1195
RoutingProtocol::AckTimerExpire (Ipv4Address neighbor, Time blacklistTimeout )
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1196
{
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1197
  NS_LOG_FUNCTION(this);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1198
  m_routingTable.MarkLinkAsUinidirectional (neighbor, blacklistTimeout);
5612
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1199
}
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1200
ecefb30bfb40 raw socket added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5611
diff changeset
  1201
void
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1202
RoutingProtocol::SendHello ()
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1203
{
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
  1204
  NS_LOG_FUNCTION(this);
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1205
  /* 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
  1206
   *   Destination IP Address         The node's IP address.
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1207
   *   Destination Sequence Number    The node's latest sequence number.
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1208
   *   Hop Count                      0
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1209
   *   Lifetime                       AllowedHelloLoss * HelloInterval
5600
0a591bcae2b3 hello messeges added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5599
diff changeset
  1210
   */
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
  1211
  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
  1212
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1213
      Ptr<Socket> socket = j->first;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1214
      Ipv4InterfaceAddress iface = j->second;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1215
      RrepHeader helloHeader (/*prefix size=*/0, /*hops=*/0, /*dst=*/iface.GetLocal (), /*dst seqno=*/m_seqNo,
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1216
      /*origin=*/iface.GetLocal (),/*lifetime=*/Scalar (AllowedHelloLoss) * HelloInterval);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1217
      Ptr<Packet> packet = Create<Packet> ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1218
      packet->AddHeader (helloHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1219
      TypeHeader tHeader (AODVTYPE_RREP);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1220
      packet->AddHeader (tHeader);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1221
      SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ *j,
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1222
                               /*dst*/iface.GetBroadcast (), /*TTL*/ 1, /*id*/0);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1223
    }
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1224
}
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1225
5575
4706976b36cc RecvRequest added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5574
diff changeset
  1226
void
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1227
RoutingProtocol::SendPacketViaRawSocket (Ptr<Packet> packet, std::pair<Ptr<Socket> , Ipv4InterfaceAddress> socketAddress, Ipv4Address dst,
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1228
    uint16_t ttl, uint16_t id )
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1229
{
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1230
  UdpHeader udpHeader;
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1231
  udpHeader.SetDestinationPort (AODV_PORT);
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1232
  udpHeader.SetSourcePort (AODV_PORT);
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1233
  packet->AddHeader (udpHeader);
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1234
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1235
  Ipv4Header ipv4Header;
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1236
  ipv4Header.SetSource (socketAddress.second.GetLocal ());
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1237
  ipv4Header.SetDestination (dst);
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1238
  ipv4Header.SetIdentification (id);
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1239
  ipv4Header.EnableChecksum ();
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1240
  ipv4Header.SetProtocol (UdpL4Protocol::PROT_NUMBER);
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1241
  ipv4Header.SetTtl (ttl);
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1242
  ipv4Header.SetPayloadSize (packet->GetSize ());
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1243
  packet->AddHeader (ipv4Header);
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
  1244
  NS_LOG_LOGIC ("Send packet " << packet->GetUid() << " from " << socketAddress.second.GetLocal () << " to " << dst);
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1245
  socketAddress.first->SendTo (packet, 0, InetSocketAddress (dst, AODV_PORT));
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1246
}
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1247
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1248
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1249
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1250
RoutingProtocol::SendPacketFromQueue (Ipv4Address dst, Ptr<Ipv4Route> route )
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1251
{
5617
23f363019fd1 RecvReply changed to respond properly to receive RREP with origin address != receiver address, but == local address of another interface
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5616
diff changeset
  1252
  NS_LOG_FUNCTION(this);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1253
  QueueEntry queueEntry;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1254
  while (m_queue.Dequeue (dst, queueEntry))
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1255
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1256
      UnicastForwardCallback ucb = queueEntry.GetUnicastForwardCallback ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1257
      ucb (route, queueEntry.GetPacket (), queueEntry.GetIpv4Header ());
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1258
    }
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1259
}
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1260
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1261
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1262
RoutingProtocol::Send (Ptr<Ipv4Route> route, Ptr<const Packet> packet, const Ipv4Header & header )
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1263
{
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1264
  NS_LOG_FUNCTION(this << packet->GetUid() << (uint16_t) header.GetProtocol());
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1265
  Ptr<Ipv4L3Protocol> l3 = m_ipv4->GetObject<Ipv4L3Protocol> ();
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1266
  NS_ASSERT(l3 != 0);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1267
  Ptr<Packet> p = packet->Copy ();
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1268
  // TODO know protocol number
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1269
  l3->Send (p, route->GetSource (), header.GetDestination (), 1, route);
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1270
}
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1271
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1272
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1273
RoutingProtocol::SendRerrWhenBreaksLinkToNextHop (Ipv4Address nextHop )
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1274
{
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1275
  NS_LOG_FUNCTION (this << nextHop);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1276
  NS_LOG_LOGIC ("Before send RERR");
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1277
  m_routingTable.Print(std::cout);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1278
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1279
  RerrHeader rerrHeader;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1280
  std::vector<Ipv4Address> precursors;
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1281
  std::map<Ipv4Address, uint32_t> unreachable;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1282
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1283
  RoutingTableEntry toNextHop;
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1284
  if (!m_routingTable.LookupRoute (nextHop, toNextHop))
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1285
    return;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1286
  toNextHop.GetPrecursors (precursors);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1287
  rerrHeader.AddUnDestination (nextHop, toNextHop.GetSeqNo ());
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1288
  m_routingTable.GetListOfDestinationWithNextHop (nextHop, unreachable);
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1289
  NS_LOG_LOGIC ("number of unreachable destination " << unreachable.size ());
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1290
  for (std::map<Ipv4Address, uint32_t>::const_iterator i = unreachable.begin (); i != unreachable.end ();)
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1291
    {
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1292
      if (!rerrHeader.AddUnDestination (i->first, i->second))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1293
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1294
          TypeHeader typeHeader (AODVTYPE_RERR);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1295
          Ptr<Packet> packet = Create<Packet> ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1296
          packet->AddHeader (rerrHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1297
          packet->AddHeader (typeHeader);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1298
          SendRerrMessage (packet, precursors);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1299
          rerrHeader.Clear ();
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1300
        }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1301
      else
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1302
        {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1303
          RoutingTableEntry toDst;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1304
          m_routingTable.LookupRoute (i->first, toDst);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1305
          toDst.GetPrecursors (precursors);
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1306
          ++i;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1307
        }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1308
    }
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1309
  if (rerrHeader.GetDestCount () != 0)
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1310
    {
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1311
      TypeHeader typeHeader (AODVTYPE_RERR);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1312
      Ptr<Packet> packet = Create<Packet> ();
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1313
      packet->AddHeader (rerrHeader);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1314
      packet->AddHeader (typeHeader);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1315
      NS_LOG_DEBUG ("RERR header");
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1316
      rerrHeader.Print(std::cout);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1317
      SendRerrMessage (packet, precursors);
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1318
    }
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1319
  unreachable.insert (std::make_pair (nextHop, toNextHop.GetSeqNo ()));
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1320
  m_routingTable.InvalidateRoutesWithDst (unreachable);
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1321
  NS_LOG_LOGIC ("After send RERR");
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1322
  m_routingTable.Print(std::cout);
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1323
}
5607
13ccda444e19 work in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5606
diff changeset
  1324
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1325
void
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1326
RoutingProtocol::SendRerr (Ipv4Address dst, bool noDelete)
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1327
{
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1328
  RerrHeader rerrHeader;
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1329
  std::vector<Ipv4Address> precursors;
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1330
  RoutingTableEntry toDst;
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1331
  if (!m_routingTable.LookupRoute (dst, toDst))
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1332
    return;
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1333
  toDst.GetPrecursors (precursors);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1334
  rerrHeader.AddUnDestination (dst, toDst.GetSeqNo ());
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1335
  TypeHeader typeHeader (AODVTYPE_RERR);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1336
  Ptr<Packet> packet = Create<Packet> ();
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1337
  packet->AddHeader (rerrHeader);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1338
  packet->AddHeader (typeHeader);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1339
  SendRerrMessage (packet, precursors);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1340
}
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1341
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1342
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1343
RoutingProtocol::SendRerrMessage (Ptr<Packet> packet, std::vector<Ipv4Address> precursors )
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1344
{
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
  1345
  NS_LOG_FUNCTION(this);
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
  1346
5605
cc68f3766bcd control of duplicated packet added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5604
diff changeset
  1347
  if (precursors.empty ())
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1348
    {
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1349
      NS_LOG_LOGIC ("No precursors");
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1350
      return; // TODO too many unreachable destinations, but no precursors
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1351
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1352
  // 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
  1353
  if (precursors.size () == 1)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1354
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1355
      RoutingTableEntry toPrecursor;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1356
      m_routingTable.LookupRoute (precursors.front (), toPrecursor);
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1357
      Ptr<Socket> socket = FindSocketWithInterfaceAddress (toPrecursor.GetInterface ());
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1358
      NS_ASSERT (socket);
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1359
      NS_LOG_LOGIC ("one precursor => unicast RERR to " << toPrecursor.GetDestination() << " from " << toPrecursor.GetInterface ().GetLocal ());
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1360
      SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toPrecursor.GetInterface ()),
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1361
                               /*dst*/precursors.front (), /*TTL*/ 1, /*id*/0);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1362
      return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1363
    }
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1364
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1365
  //  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
  1366
  std::vector<Ipv4InterfaceAddress> ifaces;
5609
da0712e2f9c9 consmetics
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5608
diff changeset
  1367
  RoutingTableEntry toPrecursor;
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1368
  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
  1369
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1370
      if (!m_routingTable.LookupRoute (*i, toPrecursor))
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1371
        break;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1372
      bool result = true;
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1373
      for (std::vector<Ipv4InterfaceAddress>::const_iterator i = ifaces.begin (); i != ifaces.end (); ++i)
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1374
        if (*i == toPrecursor.GetInterface ())
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1375
          {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1376
            result = false;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1377
            break;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1378
          }
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1379
      if (result)
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1380
        ifaces.push_back (toPrecursor.GetInterface ());
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1381
    }
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1382
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1383
  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
  1384
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1385
      Ptr<Socket> socket = FindSocketWithInterfaceAddress (*i);
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1386
      NS_ASSERT (socket);
5665
787190c03dd0 sending RERR corrected
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5664
diff changeset
  1387
      NS_LOG_LOGIC ("broadcast RERR meassage from interface " << i->GetLocal());
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1388
      SendPacketViaRawSocket (/*packet*/packet, /*pair<Ptr<Socket> , Ipv4InterfaceAddress>*/ std::make_pair(socket, toPrecursor.GetInterface ()),
5649
4915054ebfb2 SendPacketFromRawSocket = BuildPacket + socket->SendTo()
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5648
diff changeset
  1389
                               /*dst*/m_socketAddresses[socket].GetBroadcast (), /*TTL*/ 1, /*id*/0);
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1390
    }
5608
d88d191ec33b logic checking in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5607
diff changeset
  1391
5603
46f56ea8e7b9 buffering data packets added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5602
diff changeset
  1392
}
5576
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5575
diff changeset
  1393
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1394
Ptr<Socket>
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1395
RoutingProtocol::FindSocketWithInterfaceAddress (Ipv4InterfaceAddress addr ) const
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1396
{
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1397
  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
  1398
    {
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1399
      Ptr<Socket> socket = j->first;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1400
      Ipv4InterfaceAddress iface = j->second;
5650
0379b99f18f4 change functions for convenience
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5649
diff changeset
  1401
      if (iface == addr)
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1402
        return socket;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1403
    }
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1404
  Ptr<Socket> socket;
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1405
  return socket;
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1406
}
5561
f74c7723afd3 AODV protocol copy-paste in progress
Pavel Boyko <boyko@iitp.ru>
parents: 5560
diff changeset
  1407
5661
917c6c7be9f9 RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5660
diff changeset
  1408
void
917c6c7be9f9 RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5660
diff changeset
  1409
RoutingProtocol::Drop(Ptr<const Packet> packet, const Ipv4Header & header, Socket::SocketErrno err)
917c6c7be9f9 RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5660
diff changeset
  1410
{
917c6c7be9f9 RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5660
diff changeset
  1411
  NS_LOG_LOGIC (this <<" drop own packet " << packet->GetUid() << " to " << header.GetDestination () << " from queue. Error " << err);
917c6c7be9f9 RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5660
diff changeset
  1412
}
917c6c7be9f9 RoutingProtocol::Drop added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5660
diff changeset
  1413
5614
e4ac62d42079 BuildHeader added + support of raw socket in ipv4-l3-protol added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5613
diff changeset
  1414
e4ac62d42079 BuildHeader added + support of raw socket in ipv4-l3-protol added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5613
diff changeset
  1415
void
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1416
RoutingProtocol::LocalRouteRepair (Ipv4Address dst, Ipv4Address origin )
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1417
{
5653
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
  1418
  NS_LOG_FUNCTION(this << " from " << origin << " to " << dst);
3fa3f186e045 in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5652
diff changeset
  1419
5622
aa34a270824c route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5621
diff changeset
  1420
  RoutingTableEntry toDst;
aa34a270824c route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5621
diff changeset
  1421
  RoutingTableEntry toOrigin;
5629
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1422
  if (!m_routingTable.LookupRoute (dst, toDst))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1423
    return;
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1424
  if (!m_routingTable.LookupRoute (origin, toOrigin))
782756bbd870 id cache moved in separate class
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5628
diff changeset
  1425
    return;
5651
26deb6597b42 optimizations made configurable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5650
diff changeset
  1426
  uint16_t ttl = std::max (toOrigin.GetHop () * 0.5, (double) toDst.GetHop ()) + LocalAddTtl;
5664
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1427
  SendRequest (dst, ttl);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1428
  toDst.SetFlag (BEING_REPAIRED);
90aae51a4227 local repair in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5662
diff changeset
  1429
  lrtimer.Schedule(Scalar(2*(ttl + TimeoutBuffer)) * NodeTraversalTime);
5622
aa34a270824c route lifetime management fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5621
diff changeset
  1430
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1431
}
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1432
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1433
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
  1434
}
5604
a7febbd71e42 send RERR message in progress
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5603
diff changeset
  1435
}