~ubuntu-branches/ubuntu/quantal/ns3/quantal

« back to all changes in this revision

Viewing changes to ns-3.12.1/src/mesh/model/dot11s/hwmp-rtable.h

  • Committer: Package Import Robot
  • Author(s): YunQiang Su, Aron Xu, YunQiang Su, Upstream
  • Date: 2012-01-06 00:35:42 UTC
  • mfrom: (10.1.5 sid)
  • Revision ID: package-import@ubuntu.com-20120106003542-vcn5g03mhapm991h
Tags: 3.13+dfsg-1
[ Aron Xu ]:
        add tag binary and binary-indep, 
  for not build doc when --binary-arch (Closes: #654493).
[ YunQiang Su ]
        add waf 1.5/1.6 source to debian directory, 
  and build waf from there (Closes: #642217).
[ Upstream ]
  Successfully link with --as-needed option (Closes: #642225).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
 
/*
3
 
 * Copyright (c) 2008,2009 IITP RAS
4
 
 *
5
 
 * This program is free software; you can redistribute it and/or modify
6
 
 * it under the terms of the GNU General Public License version 2 as
7
 
 * published by the Free Software Foundation;
8
 
 *
9
 
 * This program is distributed in the hope that it will be useful,
10
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
 * GNU General Public License for more details.
13
 
 *
14
 
 * You should have received a copy of the GNU General Public License
15
 
 * along with this program; if not, write to the Free Software
16
 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
 
 *
18
 
 * Author: Kirill Andreev <andreev@iitp.ru>
19
 
 */
20
 
 
21
 
#ifndef HWMP_RTABLE_H
22
 
#define HWMP_RTABLE_H
23
 
 
24
 
#include <map>
25
 
#include "ns3/nstime.h"
26
 
#include "ns3/mac48-address.h"
27
 
#include "ns3/hwmp-protocol.h"
28
 
namespace ns3 {
29
 
namespace dot11s {
30
 
/**
31
 
 * \ingroup dot11s
32
 
 *
33
 
 * \brief Routing table for HWMP -- 802.11s routing protocol
34
 
 */
35
 
class HwmpRtable : public Object
36
 
{
37
 
public:
38
 
  /// Means all interfaces
39
 
  const static uint32_t INTERFACE_ANY = 0xffffffff;
40
 
  /// Maximum (the best?) path metric
41
 
  const static uint32_t MAX_METRIC = 0xffffffff;
42
 
 
43
 
  /// Route lookup result, return type of LookupXXX methods
44
 
  struct LookupResult
45
 
  {
46
 
    Mac48Address retransmitter;
47
 
    uint32_t ifIndex;
48
 
    uint32_t metric;
49
 
    uint32_t seqnum;
50
 
    Time lifetime;
51
 
    LookupResult (Mac48Address r = Mac48Address::GetBroadcast (),
52
 
                  uint32_t i = INTERFACE_ANY,
53
 
                  uint32_t m = MAX_METRIC,
54
 
                  uint32_t s = 0,
55
 
                  Time l = Seconds (0.0));
56
 
    /// True for valid route
57
 
    bool IsValid () const;
58
 
    /// Compare route lookup results, used by tests
59
 
    bool operator== (const LookupResult & o) const;
60
 
  };
61
 
  /// Path precursor = {MAC, interface ID}
62
 
  typedef std::vector<std::pair<uint32_t, Mac48Address> > PrecursorList;
63
 
 
64
 
public:
65
 
  static TypeId GetTypeId ();
66
 
  HwmpRtable ();
67
 
  ~HwmpRtable ();
68
 
  void DoDispose ();
69
 
 
70
 
  ///\name Add/delete paths
71
 
  //\{
72
 
  void AddReactivePath (
73
 
    Mac48Address destination,
74
 
    Mac48Address retransmitter,
75
 
    uint32_t interface,
76
 
    uint32_t metric,
77
 
    Time  lifetime,
78
 
    uint32_t seqnum
79
 
    );
80
 
  void AddProactivePath (
81
 
    uint32_t metric,
82
 
    Mac48Address root,
83
 
    Mac48Address retransmitter,
84
 
    uint32_t interface,
85
 
    Time  lifetime,
86
 
    uint32_t seqnum
87
 
    );
88
 
  void AddPrecursor (Mac48Address destination, uint32_t precursorInterface, Mac48Address precursorAddress, Time lifetime);
89
 
  PrecursorList GetPrecursors (Mac48Address destination);
90
 
  void DeleteProactivePath ();
91
 
  void DeleteProactivePath (Mac48Address root);
92
 
  void DeleteReactivePath (Mac48Address destination);
93
 
  //\}
94
 
 
95
 
  ///\name Lookup
96
 
  //\{
97
 
  /// Lookup path to destination
98
 
  LookupResult LookupReactive (Mac48Address destination);
99
 
  /// Return all reactive paths, including expired
100
 
  LookupResult LookupReactiveExpired (Mac48Address destination);
101
 
  /// Find proactive path to tree root. Note that calling this method has side effect of deleting expired proactive path
102
 
  LookupResult LookupProactive ();
103
 
  /// Return all proactive paths, including expired
104
 
  LookupResult LookupProactiveExpired ();
105
 
  //\}
106
 
 
107
 
  /// When peer link with a given MAC-address fails - it returns list of unreachable destination addresses
108
 
  std::vector<HwmpProtocol::FailedDestination> GetUnreachableDestinations (Mac48Address peerAddress);
109
 
 
110
 
private:
111
 
  /// Route found in reactive mode
112
 
  struct Precursor
113
 
  {
114
 
    Mac48Address address;
115
 
    uint32_t interface;
116
 
    Time whenExpire;
117
 
  };
118
 
  struct ReactiveRoute
119
 
  {
120
 
    Mac48Address retransmitter;
121
 
    uint32_t interface;
122
 
    uint32_t metric;
123
 
    Time whenExpire;
124
 
    uint32_t seqnum;
125
 
    std::vector<Precursor> precursors;
126
 
  };
127
 
  /// Route fond in proactive mode
128
 
  struct ProactiveRoute
129
 
  {
130
 
    Mac48Address root;
131
 
    Mac48Address retransmitter;
132
 
    uint32_t interface;
133
 
    uint32_t metric;
134
 
    Time whenExpire;
135
 
    uint32_t seqnum;
136
 
    std::vector<Precursor> precursors;
137
 
  };
138
 
 
139
 
  /// List of routes
140
 
  std::map<Mac48Address, ReactiveRoute>  m_routes;
141
 
  /// Path to proactive tree root MP
142
 
  ProactiveRoute  m_root;
143
 
};
144
 
} // namespace dot11s
145
 
} // namespace ns3
146
 
#endif