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