src/routing/aodv/aodv-rtable.h
author Borovkova Elena <borovkovaes@iitp.ru>
Thu, 16 Jul 2009 18:25:49 +0400
changeset 5597 8e4c7f2aaead
parent 5593 4c3166588c8b
child 5601 82c874729b6c
permissions -rw-r--r--
mothods, classes and members renamed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     2
/*
5591
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5586
diff changeset
     3
 * Copyright (c) 2009 IITP RAS
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     4
 *
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     8
 *
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    12
 * GNU General Public License for more details.
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    13
 *
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    17
 *
5591
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5586
diff changeset
    18
 * Based on 
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5586
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: 5586
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: 5586
diff changeset
    21
 * 
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5586
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: 5586
diff changeset
    23
 *      http://core.it.uu.se/core/index.php/AODV-UU
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    24
 *
5591
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5586
diff changeset
    25
 * Authors: Elena Borovkova <borovkovaes@iitp.ru>
e0448da5da14 AODV copyright changed to IITP
Pavel Boyko <boyko@iitp.ru>
parents: 5586
diff changeset
    26
 *          Pavel Boyko <boyko@iitp.ru>
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    27
 */
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    28
#ifndef __aodv_rtable_h__
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    29
#define __aodv_rtable_h__
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    30
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    31
#include <cassert>
5564
95a3e7beb97b replacement of the vector by a map in rtable
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5562
diff changeset
    32
#include <map>
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    33
#include <sys/types.h>
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    34
#include "ns3/ipv4.h"
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
    35
#include "ns3/ipv4-route.h"
5581
d74aff108ddc AodvProtocol in progress, doesn't work
Pavel Boyko <boyko@iitp.ru>
parents: 5578
diff changeset
    36
#include "ns3/ipv4-address.h"
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    37
#include "ns3/nstime.h"
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
    38
#include "ns3/net-device.h"
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
    39
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    40
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    41
namespace ns3 {
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    42
namespace aodv {
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    43
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
    44
#define INFINITY2       0xff
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
    45
#define DELETE_PERIOD   10 // seconds. TODO: remove defines
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    46
5584
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
    47
enum RouteFlags
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
    48
{
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
    49
  RTF_DOWN = 0,
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
    50
  RTF_UP = 1,
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
    51
  RTF_IN_REPAIR = 2
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
    52
};
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    53
5538
87e951903c96 cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5537
diff changeset
    54
/**
87e951903c96 cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5537
diff changeset
    55
 * \ingroup aodv
87e951903c96 cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5537
diff changeset
    56
 * \brief Route Table Entry
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    57
 */
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
    58
class RoutingTableEntry
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    59
{
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
    60
public:
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
    61
  RoutingTableEntry(Ptr<NetDevice> dev,Ipv4Address dst = Ipv4Address(), bool vSeqNo = false, u_int32_t m_seqNo = 0, Ipv4Address iface = Ipv4Address(), u_int16_t  hops = 0,
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
    62
      Ipv4Address nextHop = Ipv4Address(), Time lifetime = Seconds(0));
5584
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
    63
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
    64
  ~RoutingTableEntry();
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
    65
  
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
    66
  ///\name Precursors management
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
    67
  //\{
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    68
  /**
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    69
   * Insert precursor in precursor list if it doesn't yet exist in the list
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    70
   * \param id precursor address
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    71
   * \return true on success
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    72
   */
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
    73
  bool InsertPrecursor(Ipv4Address id);
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    74
  /**
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    75
   * Lookup precursor by address
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    76
   * \param id precursor address
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    77
   * \return true on success
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    78
   */
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
    79
  bool LookupPrecursor(Ipv4Address id);
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    80
  /**
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    81
   * \brief Delete precursor
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    82
   * \param id precursor address
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    83
   * \return true on success
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    84
   */
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
    85
  bool DeletePrecursor(Ipv4Address id);
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    86
  /// Delete all precursors
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
    87
  void DeleteAllPrecursors();
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    88
  /**
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    89
   * \return true if precursor list empty
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
    90
   */
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
    91
  bool IsPrecursorListEmpty() const;
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
    92
  //\}
5571
b82fbde6cf8d BroadcastIdCache methods and SendRequest() added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5565
diff changeset
    93
  /// Return last valid hop count
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
    94
  uint16_t GetLastValidHopCount() { return m_lastHopCount; }
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
    95
  /// Mark entry as "down" (i.e. disable it)
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
    96
  void Down ();
5574
093ebba1c04c Set, Get methods for aodv_rt_entry added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5571
diff changeset
    97
  ///\name Fields
093ebba1c04c Set, Get methods for aodv_rt_entry added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5571
diff changeset
    98
  //\{
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
    99
  Ipv4Address GetDestination() const { return m_ipv4Route->GetDestination(); }
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   100
  Ptr<Ipv4Route> GetRoute() const { return  m_ipv4Route; }
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   101
  void SetRoute(Ptr<Ipv4Route> r) { m_ipv4Route = r; }
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   102
  void SetNextHop (Ipv4Address nextHop) { m_ipv4Route->SetGateway(nextHop); }
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   103
  Ipv4Address GetNextHop () const { return m_ipv4Route->GetGateway(); }
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   104
  void SetOutputDevice(Ptr<NetDevice> dev) { m_ipv4Route->SetOutputDevice(dev); }
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   105
  Ptr<NetDevice> GetOutputDevice() const { return m_ipv4Route->GetOutputDevice(); }
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   106
  void SetValidSeqNo(bool s) { m_validSeqNo = s; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   107
  bool GetValidSeqNo() const { return m_validSeqNo; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   108
  void SetSeqNo(uint32_t sn) { m_seqNo = sn; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   109
  uint32_t GetSeqNo() const { return m_seqNo; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   110
  void SetHop(uint16_t hop) { m_hops = hop; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   111
  uint16_t GetHop() const {return m_hops; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   112
  void SetLifeTime(Time lt) { m_lifeTime = lt; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   113
  Time GetLifeTime() const { return m_lifeTime; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   114
  void SetFlag(uint8_t flag) { m_flag = flag; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   115
  uint8_t GetFlag() const { return m_flag; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   116
  void SetRreqCnt(uint8_t n) { m_reqCount = n; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   117
  uint8_t GetRreqCnt() const { return m_reqCount; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   118
  void SetRreqTimeout(Time t) {m_reqTimeout = t; }
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   119
  Time GetRreqTimeout() const { return m_reqTimeout; }
5574
093ebba1c04c Set, Get methods for aodv_rt_entry added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5571
diff changeset
   120
  //\}
093ebba1c04c Set, Get methods for aodv_rt_entry added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5571
diff changeset
   121
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   122
  /**
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   123
   * \brief Compare destination address
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   124
   * \return true if equal
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   125
   */
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   126
  bool operator==(Ipv4Address const  dst) const
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   127
  {
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   128
    return (m_ipv4Route->GetDestination() == dst);
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   129
  }
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   130
  void Print(std::ostream & os) const;
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
   131
private:
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   132
  /// Valid Destination Sequence Number flag
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   133
  bool m_validSeqNo;
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   134
  /// Destination Sequence Number, if m_validSeqNo = true
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   135
  uint32_t m_seqNo;
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   136
  /// Hop Count (number of hops needed to reach destination)
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   137
  uint16_t m_hops;
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   138
  /// Last valid hop count
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   139
  uint16_t m_lastHopCount;
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   140
  /**
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   141
  * \brief Expiration or deletion time of the route
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   142
  *	Lifetime field in the routing table plays dual role --
5544
e149190912e4 Rtable cosmetics + RREQ header
Pavel Boyko <boyko@iitp.ru>
parents: 5543
diff changeset
   143
  *	for an active route it is the expiration time, and for an invalid route
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   144
  *	it is the deletion time.
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   145
  */
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   146
  Time m_lifeTime;
5592
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   147
  /** Ip route, include
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   148
  *   - destination address
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   149
  *   - source address
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   150
  *   - next hop address (gateway)
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   151
  *   - output device
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   152
  */
b74806ad2935 Ptr<Ipv4Route> added in routing table
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5586
diff changeset
   153
  Ptr<Ipv4Route> m_ipv4Route;
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   154
  /// Routing flags: down, up or in repair
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   155
  uint8_t m_flag;
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   156
5584
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
   157
  /// List of precursors
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   158
  std::vector<Ipv4Address> m_precursorList;
5574
093ebba1c04c Set, Get methods for aodv_rt_entry added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5571
diff changeset
   159
  /// When I can send another request
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   160
  Time m_reqTimeout;
5574
093ebba1c04c Set, Get methods for aodv_rt_entry added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5571
diff changeset
   161
  /// Number of route requests
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   162
  uint8_t m_reqCount;
5574
093ebba1c04c Set, Get methods for aodv_rt_entry added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5571
diff changeset
   163
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
   164
  // TODO review and delete
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   165
#define MAX_HISTORY     3
5538
87e951903c96 cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5537
diff changeset
   166
  double rt_disc_latency[MAX_HISTORY];
87e951903c96 cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5537
diff changeset
   167
  char hist_indx;
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   168
};
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   169
5538
87e951903c96 cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5537
diff changeset
   170
/**
87e951903c96 cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5537
diff changeset
   171
 * \ingroup aodv
87e951903c96 cosmetics
Pavel Boyko <boyko@iitp.ru>
parents: 5537
diff changeset
   172
 * The Routing Table
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   173
 */
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   174
class RoutingTable
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   175
{
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   176
public:
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   177
  RoutingTable() {}
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   178
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   179
  /**
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   180
   * Add routing table entry if it doesn't yet exist in routing table
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   181
   * \param r routing table entry
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   182
   * \return true in success
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   183
   */
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   184
  bool AddRoute(RoutingTableEntry const & r);
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   185
  /**
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   186
   * Delete routing table entry
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   187
   * \param dst destination address
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   188
   * \return true on success
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   189
   */
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   190
  bool DeleteRoute(Ipv4Address dst);
5542
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   191
  /**
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   192
   * Lookup routing table entry
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   193
   * \param dst destination address
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   194
   * \param rt entry with destination address dst, if exists
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   195
   * \return true on success
1b504e63a1b1 aodv_rtable unit test added
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5540
diff changeset
   196
   */
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   197
  bool LookupRoute(Ipv4Address dst, RoutingTableEntry & rt) const;
5584
1c5ed08002fe in process
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5583
diff changeset
   198
  /// Update routing table
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   199
  bool Update(Ipv4Address dst, RoutingTableEntry & rt);
5562
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
   200
  /// Set routing table entry flags
2fc3138b5622 AODV RoutingProtocol stub finished
Pavel Boyko <boyko@iitp.ru>
parents: 5561
diff changeset
   201
  void SetEntryState (Ipv4Address dst, uint8_t state /*TODO use enum*/);
5586
18b0f80bbab7 RecvReply fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5584
diff changeset
   202
  /// Print routing table
18b0f80bbab7 RecvReply fixed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5584
diff changeset
   203
  void Print(std::ostream &os) const;
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   204
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   205
private:
5597
8e4c7f2aaead mothods, classes and members renamed
Borovkova Elena <borovkovaes@iitp.ru>
parents: 5593
diff changeset
   206
  std::map<Ipv4Address, RoutingTableEntry> m_ipv4AddressEntry;
5537
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   207
};
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   208
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   209
}}
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   210
9cd454241cb3 AODV routing table added
Pavel Boyko <boyko@iitp.ru>
parents:
diff changeset
   211
#endif /* _aodv__rtable_h__ */