src/routing/nix-vector-routing/ipv4-nix-vector-routing.cc
author Josh Pelkey <jpelkey@gatech.edu>
Thu, 07 Jan 2010 19:35:39 -0500
changeset 5899 a46168c7f4a2
parent 5898 408970e134cb
child 5910 681058254595
permissions -rw-r--r--
Forgot code freeze. Revert nix-vector bug fix for bug 779
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     2
/*
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     3
 * Copyright (c) 2009 The Georgia Institute of Technology 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     4
 *
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     8
 *
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    12
 * GNU General Public License for more details.
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    13
 *
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    17
 *
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    18
 * Authors: Josh Pelkey <jpelkey@gatech.edu>
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    19
 */
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    20
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    21
#include <queue>
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    22
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    23
#include "ns3/log.h"
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    24
#include "ns3/abort.h"
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    25
#include "ns3/ipv4-list-routing.h"
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    26
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    27
#include "ipv4-nix-vector-routing.h"
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    28
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    29
NS_LOG_COMPONENT_DEFINE ("Ipv4NixVectorRouting");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    30
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    31
namespace ns3 {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    32
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    33
NS_OBJECT_ENSURE_REGISTERED (Ipv4NixVectorRouting);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    34
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    35
TypeId 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    36
Ipv4NixVectorRouting::GetTypeId (void)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    37
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    38
  static TypeId tid = TypeId ("ns3::Ipv4NixVectorRouting")
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    39
    .SetParent<Ipv4RoutingProtocol> ()
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    40
    .AddConstructor<Ipv4NixVectorRouting> ()
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    41
    ;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    42
  return tid;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    43
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    44
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    45
Ipv4NixVectorRouting::Ipv4NixVectorRouting ()
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    46
:m_totalNeighbors (0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    47
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    48
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    49
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    50
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    51
Ipv4NixVectorRouting::~Ipv4NixVectorRouting ()
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    52
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    53
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    54
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    55
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    56
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    57
Ipv4NixVectorRouting::SetIpv4 (Ptr<Ipv4> ipv4)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    58
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    59
  NS_ASSERT (ipv4 != 0);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    60
  NS_ASSERT (m_ipv4 == 0);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    61
  NS_LOG_DEBUG ("Created Ipv4NixVectorProtocol");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    62
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    63
  m_ipv4 = ipv4;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    64
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    65
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    66
void 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    67
Ipv4NixVectorRouting::DoDispose ()
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    68
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    69
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    70
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    71
  m_node = 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    72
  m_ipv4 = 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    73
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    74
  Ipv4RoutingProtocol::DoDispose ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    75
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    76
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    77
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    78
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    79
Ipv4NixVectorRouting::SetNode (Ptr<Node> node)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    80
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    81
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    82
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    83
  m_node = node;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    84
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    85
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    86
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    87
Ipv4NixVectorRouting::FlushGlobalNixRoutingCache ()
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    88
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    89
    NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    90
    NodeList::Iterator listEnd = NodeList::End ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    91
    for (NodeList::Iterator i = NodeList::Begin (); i != listEnd; i++)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    92
      {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    93
        Ptr<Node> node = *i;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    94
        Ptr<Ipv4NixVectorRouting> rp = node->GetObject<Ipv4NixVectorRouting> ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    95
        if (!rp)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    96
          {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    97
            continue;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    98
          }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
    99
        NS_LOG_LOGIC ("Flushing Nix caches.");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   100
        rp->FlushNixCache ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   101
        rp->FlushIpv4RouteCache ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   102
      }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   103
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   104
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   105
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   106
Ipv4NixVectorRouting::FlushNixCache ()
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   107
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   108
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   109
  m_nixCache.clear ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   110
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   111
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   112
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   113
Ipv4NixVectorRouting::FlushIpv4RouteCache ()
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   114
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   115
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   116
  m_ipv4RouteCache.clear ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   117
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   118
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   119
Ptr<NixVector>
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   120
Ipv4NixVectorRouting::GetNixVector (Ptr<Node> source, Ipv4Address dest)
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   121
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   122
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   123
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   124
  Ptr<NixVector> nixVector = CreateObject<NixVector> ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   125
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   126
  // not in cache, must build the nix vector
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   127
  // First, we have to figure out the nodes 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   128
  // associated with these IPs
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   129
  Ptr<Node> destNode = GetNodeByIp (dest);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   130
  if (destNode == 0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   131
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   132
      NS_LOG_ERROR ("No routing path exists");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   133
      return 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   134
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   135
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   136
  // if source == dest, then we have a special case
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   137
  // because the node is sending to itself.  have to
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   138
  // build the nix vector a little differently
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   139
  if (source == destNode)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   140
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   141
      BuildNixVectorLocal(nixVector);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   142
      return nixVector;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   143
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   144
  else
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   145
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   146
      // otherwise proceed as normal 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   147
      // and build the nix vector
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   148
      std::vector< Ptr<Node> > parentVector;
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   149
      BFS (NodeList::GetNNodes (), source, destNode, parentVector);
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   150
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   151
      if (BuildNixVector (parentVector, source->GetId (), destNode->GetId (), nixVector))
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   152
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   153
          return nixVector;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   154
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   155
      else
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   156
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   157
          NS_LOG_ERROR ("No routing path exists");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   158
          return 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   159
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   160
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   161
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   162
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   163
Ptr<NixVector>
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   164
Ipv4NixVectorRouting::GetNixVectorInCache (Ipv4Address address)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   165
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   166
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   167
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   168
  NixMap_t::iterator iter = m_nixCache.find (address);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   169
  if (iter != m_nixCache.end ())
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   170
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   171
      NS_LOG_LOGIC ("Found Nix-vector in cache.");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   172
      return iter->second;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   173
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   174
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   175
  // not in cache
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   176
  return 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   177
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   178
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   179
Ptr<Ipv4Route>
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   180
Ipv4NixVectorRouting::GetIpv4RouteInCache (Ipv4Address address)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   181
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   182
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   183
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   184
  Ipv4RouteMap_t::iterator iter = m_ipv4RouteCache.find (address);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   185
  if (iter != m_ipv4RouteCache.end ())
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   186
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   187
      NS_LOG_LOGIC ("Found Ipv4Route in cache.");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   188
      return iter->second;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   189
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   190
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   191
  // not in cache
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   192
  return 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   193
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   194
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   195
bool
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   196
Ipv4NixVectorRouting::BuildNixVectorLocal (Ptr<NixVector> nixVector)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   197
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   198
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   199
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   200
  uint32_t numberOfDevices = m_node->GetNDevices ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   201
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   202
  // here we are building a nix vector to 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   203
  // ourself, so we need to find the loopback 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   204
  // interface and add that to the nix vector
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   205
  Ipv4Address loopback ("127.0.0.1");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   206
  for (uint32_t i = 0; i < numberOfDevices; i++)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   207
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   208
      uint32_t interfaceIndex = (m_ipv4)->GetInterfaceForDevice(m_node->GetDevice(i));
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   209
      Ipv4InterfaceAddress ifAddr = m_ipv4->GetAddress (interfaceIndex, 0);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   210
      if (ifAddr.GetLocal() == loopback)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   211
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   212
          NS_LOG_LOGIC ("Adding loopback to nix.");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   213
          NS_LOG_LOGIC ("Adding Nix: " << i << " with " << nixVector->BitCount (numberOfDevices) 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   214
                        << " bits, for node " << m_node->GetId());
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   215
          nixVector->AddNeighborIndex (i, nixVector->BitCount (numberOfDevices));
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   216
          return true;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   217
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   218
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   219
  return false;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   220
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   221
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   222
bool
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   223
Ipv4NixVectorRouting::BuildNixVector (const std::vector< Ptr<Node> > & parentVector, uint32_t source, uint32_t dest, Ptr<NixVector> nixVector)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   224
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   225
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   226
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   227
  if (source == dest)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   228
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   229
      return true;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   230
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   231
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   232
  if (parentVector.at (dest) == 0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   233
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   234
      return false;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   235
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   236
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   237
  Ptr<Node> parentNode = parentVector.at (dest);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   238
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   239
  uint32_t numberOfDevices = parentNode->GetNDevices ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   240
  uint32_t destId = 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   241
  uint32_t totalNeighbors = 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   242
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   243
  // scan through the net devices on the parent node
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   244
  // and then look at the nodes adjacent to them
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   245
  for (uint32_t i = 0; i < numberOfDevices; i++)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   246
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   247
      // Get a net device from the node
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   248
      // as well as the channel, and figure
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   249
      // out the adjacent net devices
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   250
      Ptr<NetDevice> localNetDevice = parentNode->GetDevice (i);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   251
      if (localNetDevice->IsBridge ())
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   252
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   253
          continue;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   254
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   255
      Ptr<Channel> channel = localNetDevice->GetChannel ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   256
      if (channel == 0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   257
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   258
          continue;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   259
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   260
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   261
      // this function takes in the local net dev, and channnel, and
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   262
      // writes to the netDeviceContainer the adjacent net devs
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   263
      NetDeviceContainer netDeviceContainer;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   264
      GetAdjacentNetDevices (localNetDevice, channel, netDeviceContainer);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   265
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   266
      // Finally we can get the adjacent nodes
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   267
      // and scan through them.  If we find the 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   268
      // node that matches "dest" then we can add 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   269
      // the index  to the nix vector.
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   270
      // the index corresponds to the neighbor index
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   271
      uint32_t offset = 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   272
      for (NetDeviceContainer::Iterator iter = netDeviceContainer.Begin (); iter != netDeviceContainer.End (); iter++)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   273
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   274
          Ptr<Node> remoteNode = (*iter)->GetNode ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   275
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   276
          if (remoteNode->GetId () == dest)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   277
            {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   278
              destId = totalNeighbors + offset;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   279
            }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   280
          offset += 1;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   281
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   282
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   283
      totalNeighbors += netDeviceContainer.GetN ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   284
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   285
  NS_LOG_LOGIC ("Adding Nix: " << destId << " with " 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   286
                << nixVector->BitCount (totalNeighbors) << " bits, for node " << parentNode->GetId());
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   287
  nixVector->AddNeighborIndex (destId, nixVector->BitCount (totalNeighbors));
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   288
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   289
  // recurse through parent vector, grabbing the path 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   290
  // and building the nix vector
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   291
  BuildNixVector (parentVector, source, (parentVector.at (dest))->GetId (), nixVector);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   292
  return true;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   293
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   294
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   295
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   296
Ipv4NixVectorRouting::GetAdjacentNetDevices (Ptr<NetDevice> netDevice, Ptr<Channel> channel, NetDeviceContainer & netDeviceContainer)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   297
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   298
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   299
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   300
  for (uint32_t i = 0; i < channel->GetNDevices (); i++)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   301
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   302
      Ptr<NetDevice> remoteDevice = channel->GetDevice (i);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   303
      if (remoteDevice != netDevice)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   304
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   305
          Ptr<BridgeNetDevice> bd = NetDeviceIsBridged (remoteDevice);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   306
          // we have a bridged device, we need to add all 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   307
          // bridged devices
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   308
          if (bd)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   309
            {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   310
              NS_LOG_LOGIC ("Looking through bridge ports of bridge net device " << bd);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   311
              for (uint32_t j = 0; j < bd->GetNBridgePorts (); ++j)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   312
                {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   313
                  Ptr<NetDevice> ndBridged = bd->GetBridgePort (j);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   314
                  if (ndBridged == remoteDevice)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   315
                    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   316
                      NS_LOG_LOGIC ("That bridge port is me, don't walk backward");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   317
                      continue;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   318
                    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   319
                  Ptr<Channel> chBridged = ndBridged->GetChannel ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   320
                  if (channel == 0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   321
                    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   322
                      continue;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   323
                    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   324
                  GetAdjacentNetDevices (ndBridged, chBridged, netDeviceContainer);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   325
                }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   326
            }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   327
          else
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   328
            {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   329
              netDeviceContainer.Add (channel->GetDevice (i));
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   330
            }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   331
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   332
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   333
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   334
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   335
Ptr<Node>
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   336
Ipv4NixVectorRouting::GetNodeByIp (Ipv4Address dest)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   337
{ 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   338
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   339
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   340
  NodeContainer allNodes = NodeContainer::GetGlobal ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   341
  Ptr<Node> destNode;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   342
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   343
  for (NodeContainer::Iterator i = allNodes.Begin (); i != allNodes.End (); ++i)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   344
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   345
      Ptr<Node> node = *i;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   346
      Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   347
      if (ipv4->GetInterfaceForAddress (dest) != -1)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   348
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   349
          destNode = node;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   350
          break;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   351
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   352
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   353
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   354
  if (!destNode)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   355
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   356
      NS_LOG_ERROR ("Couldn't find dest node given the IP" << dest);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   357
      return 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   358
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   359
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   360
  return destNode;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   361
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   362
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   363
uint32_t
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   364
Ipv4NixVectorRouting::FindTotalNeighbors ()
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   365
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   366
  uint32_t numberOfDevices = m_node->GetNDevices ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   367
  uint32_t totalNeighbors = 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   368
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   369
  // scan through the net devices on the parent node
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   370
  // and then look at the nodes adjacent to them
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   371
  for (uint32_t i = 0; i < numberOfDevices; i++)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   372
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   373
      // Get a net device from the node
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   374
      // as well as the channel, and figure
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   375
      // out the adjacent net devices
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   376
      Ptr<NetDevice> localNetDevice = m_node->GetDevice (i);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   377
      Ptr<Channel> channel = localNetDevice->GetChannel ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   378
      if (channel == 0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   379
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   380
          continue;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   381
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   382
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   383
      // this function takes in the local net dev, and channnel, and
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   384
      // writes to the netDeviceContainer the adjacent net devs
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   385
      NetDeviceContainer netDeviceContainer;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   386
      GetAdjacentNetDevices (localNetDevice, channel, netDeviceContainer);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   387
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   388
      totalNeighbors += netDeviceContainer.GetN ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   389
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   390
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   391
  return totalNeighbors;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   392
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   393
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   394
Ptr<BridgeNetDevice>
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   395
Ipv4NixVectorRouting::NetDeviceIsBridged (Ptr<NetDevice> nd) const
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   396
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   397
  NS_LOG_FUNCTION (nd);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   398
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   399
  Ptr<Node> node = nd->GetNode ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   400
  uint32_t nDevices = node->GetNDevices();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   401
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   402
  //
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   403
  // There is no bit on a net device that says it is being bridged, so we have
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   404
  // to look for bridges on the node to which the device is attached.  If we
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   405
  // find a bridge, we need to look through its bridge ports (the devices it
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   406
  // bridges) to see if we find the device in question.
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   407
  //
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   408
  for (uint32_t i = 0; i < nDevices; ++i)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   409
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   410
      Ptr<NetDevice> ndTest = node->GetDevice(i);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   411
      NS_LOG_LOGIC ("Examine device " << i << " " << ndTest);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   412
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   413
      if (ndTest->IsBridge ())
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   414
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   415
          NS_LOG_LOGIC ("device " << i << " is a bridge net device");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   416
          Ptr<BridgeNetDevice> bnd = ndTest->GetObject<BridgeNetDevice> ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   417
          NS_ABORT_MSG_UNLESS (bnd, "Ipv4NixVectorRouting::NetDeviceIsBridged (): GetObject for <BridgeNetDevice> failed");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   418
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   419
          for (uint32_t j = 0; j < bnd->GetNBridgePorts (); ++j)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   420
            {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   421
              NS_LOG_LOGIC ("Examine bridge port " << j << " " << bnd->GetBridgePort (j));
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   422
              if (bnd->GetBridgePort (j) == nd)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   423
                {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   424
                  NS_LOG_LOGIC ("Net device " << nd << " is bridged by " << bnd);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   425
                  return bnd;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   426
                }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   427
            }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   428
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   429
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   430
  NS_LOG_LOGIC ("Net device " << nd << " is not bridged");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   431
  return 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   432
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   433
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   434
uint32_t
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   435
Ipv4NixVectorRouting::FindNetDeviceForNixIndex (uint32_t nodeIndex, Ipv4Address & gatewayIp)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   436
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   437
  uint32_t numberOfDevices = m_node->GetNDevices ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   438
  uint32_t index = 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   439
  uint32_t totalNeighbors = 0;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   440
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   441
  // scan through the net devices on the parent node
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   442
  // and then look at the nodes adjacent to them
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   443
  for (uint32_t i = 0; i < numberOfDevices; i++)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   444
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   445
      // Get a net device from the node
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   446
      // as well as the channel, and figure
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   447
      // out the adjacent net devices
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   448
      Ptr<NetDevice> localNetDevice = m_node->GetDevice (i);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   449
      Ptr<Channel> channel = localNetDevice->GetChannel ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   450
      if (channel == 0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   451
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   452
          continue;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   453
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   454
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   455
      // this function takes in the local net dev, and channnel, and
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   456
      // writes to the netDeviceContainer the adjacent net devs
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   457
      NetDeviceContainer netDeviceContainer;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   458
      GetAdjacentNetDevices (localNetDevice, channel, netDeviceContainer);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   459
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   460
      // check how many neighbors we have
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   461
      if (nodeIndex < (totalNeighbors + netDeviceContainer.GetN ()))
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   462
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   463
          // found the proper net device
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   464
          index = i;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   465
          Ptr<NetDevice> gatewayDevice = netDeviceContainer.Get (nodeIndex-totalNeighbors);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   466
          Ptr<Node> gatewayNode = gatewayDevice->GetNode ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   467
          Ptr<Ipv4> ipv4 = gatewayNode->GetObject<Ipv4> ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   468
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   469
          uint32_t interfaceIndex = (ipv4)->GetInterfaceForDevice(gatewayDevice);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   470
          Ipv4InterfaceAddress ifAddr = ipv4->GetAddress (interfaceIndex, 0);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   471
          gatewayIp = ifAddr.GetLocal ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   472
          break;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   473
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   474
      totalNeighbors += netDeviceContainer.GetN ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   475
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   476
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   477
  return index;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   478
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   479
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   480
Ptr<Ipv4Route> 
5856
7fd20c798a7d bug 742: Implementation of SO_BINDTODEVICE
Antti Mäkelä <zarhan@cc.hut.fi>
parents: 5224
diff changeset
   481
Ipv4NixVectorRouting::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr)
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   482
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   483
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   484
  Ptr<Ipv4Route> rtentry;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   485
  Ptr<NixVector> nixVectorInCache;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   486
  Ptr<NixVector> nixVectorForPacket;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   487
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   488
  NS_LOG_DEBUG ("Dest IP from header: " << header.GetDestination ());
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   489
  // check if cache
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   490
  nixVectorInCache = GetNixVectorInCache(header.GetDestination ());
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   491
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   492
  // not in cache
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   493
  if (!nixVectorInCache)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   494
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   495
      NS_LOG_LOGIC ("Nix-vector not in cache, build: ");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   496
      // Build the nix-vector, given this node and the
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   497
      // dest IP address
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   498
      nixVectorInCache = GetNixVector (m_node, header.GetDestination ());
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   499
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   500
      // cache it
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   501
      m_nixCache.insert (NixMap_t::value_type (header.GetDestination (), nixVectorInCache));
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   502
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   503
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   504
  // path exists
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   505
  if (nixVectorInCache)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   506
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   507
      NS_LOG_LOGIC ("Nix-vector contents: " << *nixVectorInCache);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   508
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   509
      // create a new nix vector to be used, 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   510
      // we want to keep the cached version clean
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   511
      nixVectorForPacket = CreateObject<NixVector> ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   512
      nixVectorForPacket = nixVectorInCache->Copy(); 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   513
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   514
      // Get the interface number that we go out of, by extracting
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   515
      // from the nix-vector
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   516
      if (m_totalNeighbors == 0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   517
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   518
          m_totalNeighbors = FindTotalNeighbors ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   519
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   520
  
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   521
      // Get the interface number that we go out of, by extracting
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   522
      // from the nix-vector
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   523
      uint32_t numberOfBits = nixVectorForPacket->BitCount (m_totalNeighbors);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   524
      uint32_t nodeIndex = nixVectorForPacket->ExtractNeighborIndex (numberOfBits);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   525
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   526
      // Possibly search here in a cache for this node index 
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   527
      // and look for a Ipv4Route.  If we have it, don't 
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   528
      // need to do the next 3 lines.
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   529
      rtentry = GetIpv4RouteInCache (header.GetDestination ());
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   530
      // not in cache
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   531
      if (!rtentry)
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   532
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   533
          NS_LOG_LOGIC ("Ipv4Route not in cache, build: ");
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   534
          Ipv4Address gatewayIp;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   535
          uint32_t index = FindNetDeviceForNixIndex (nodeIndex, gatewayIp);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   536
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   537
          uint32_t interfaceIndex = (m_ipv4)->GetInterfaceForDevice(m_node->GetDevice(index));
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   538
          Ipv4InterfaceAddress ifAddr = m_ipv4->GetAddress (interfaceIndex, 0);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   539
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   540
          // start filling in the Ipv4Route info
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   541
          rtentry = Create<Ipv4Route> ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   542
          rtentry->SetSource (ifAddr.GetLocal ());
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   543
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   544
          rtentry->SetGateway (gatewayIp);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   545
          rtentry->SetDestination (header.GetDestination ());
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   546
          rtentry->SetOutputDevice (m_ipv4->GetNetDevice (interfaceIndex));
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   547
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   548
          sockerr = Socket::ERROR_NOTERROR;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   549
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   550
          // add rtentry to cache
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   551
          m_ipv4RouteCache.insert(Ipv4RouteMap_t::value_type(header.GetDestination (), rtentry));
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   552
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   553
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   554
      NS_LOG_LOGIC ("Nix-vector contents: " << *nixVectorInCache << " : Remaining bits: " << nixVectorForPacket->GetRemainingBits());
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   555
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   556
      // Add  nix-vector in the packet class 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   557
      // make sure the packet exists first
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   558
      if (p)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   559
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   560
          NS_LOG_LOGIC ("Adding Nix-vector to packet: " << *nixVectorForPacket);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   561
          p->SetNixVector (nixVectorForPacket);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   562
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   563
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   564
  else // path doesn't exist
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   565
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   566
      NS_LOG_ERROR ("No path to the dest: " << header.GetDestination ());
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   567
      sockerr = Socket::ERROR_NOROUTETOHOST;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   568
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   569
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   570
  return rtentry;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   571
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   572
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   573
bool 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   574
Ipv4NixVectorRouting::RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   575
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   576
                             LocalDeliverCallback lcb, ErrorCallback ecb)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   577
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   578
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   579
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   580
  Ptr<Ipv4Route> rtentry;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   581
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   582
  // Get the nix-vector from the packet
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   583
  Ptr<NixVector> nixVector = p->GetNixVector();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   584
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   585
  // make sure it exists, if not something
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   586
  // went wrong
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   587
  if (!nixVector)
5898
408970e134cb Fix bug 779: NixVectorRouting ignores specified outgoing interface in RouteOutput
Josh Pelkey <jpelkey@gatech.edu>
parents: 5856
diff changeset
   588
    {
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   589
      NS_LOG_ERROR ("Nix-vector wasn't in the packet! Rebuild.");
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   590
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   591
      Ptr<NixVector> nixVectorInCache;
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   592
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   593
      NS_LOG_DEBUG ("Dest IP from header: " << header.GetDestination ());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   594
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   595
      // check if cache
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   596
      nixVectorInCache = GetNixVectorInCache(header.GetDestination ());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   597
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   598
      // not in cache
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   599
      if (!nixVectorInCache)
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   600
        {
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   601
          NS_LOG_LOGIC ("RouteInput(): Nix-vector not in cache, build: ");
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   602
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   603
          // Build the nix-vector, given this node and the
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   604
          // dest IP address
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   605
          nixVectorInCache = GetNixVector (m_node, header.GetDestination ());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   606
        }
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   607
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   608
      // path exists
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   609
      if (nixVectorInCache)
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   610
        {
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   611
          NS_LOG_LOGIC ("Nix-vector contents: " << *nixVectorInCache);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   612
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   613
          // cache it
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   614
          m_nixCache.insert(NixMap_t::value_type(header.GetDestination (), nixVectorInCache));
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   615
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   616
          // create a new nix vector to be used, 
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   617
          // we want to keep the cached version clean
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   618
          Ptr<NixVector> nixVectorForPacket;
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   619
          nixVectorForPacket = CreateObject<NixVector> ();
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   620
          nixVectorForPacket = nixVectorInCache->Copy(); 
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   621
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   622
          // Get the interface number that we go out of, by extracting
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   623
          // from the nix-vector
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   624
          if (m_totalNeighbors == 0)
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   625
            {
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   626
              m_totalNeighbors = FindTotalNeighbors ();
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   627
            }
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   628
          uint32_t numberOfBits = nixVectorForPacket->BitCount (m_totalNeighbors);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   629
          uint32_t nodeIndex = nixVectorForPacket->ExtractNeighborIndex (numberOfBits);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   630
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   631
          rtentry = GetIpv4RouteInCache (header.GetDestination ());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   632
          // not in cache
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   633
          if (!rtentry)
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   634
            {
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   635
              NS_LOG_LOGIC ("Ipv4Route not in cache, build: ");
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   636
              Ipv4Address gatewayIp;
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   637
              uint32_t index = FindNetDeviceForNixIndex (nodeIndex, gatewayIp);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   638
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   639
              uint32_t interfaceIndex = (m_ipv4)->GetInterfaceForDevice(m_node->GetDevice(index));
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   640
              Ipv4InterfaceAddress ifAddr = m_ipv4->GetAddress (interfaceIndex, 0);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   641
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   642
              // start filling in the Ipv4Route info
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   643
              rtentry = Create<Ipv4Route> ();
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   644
              rtentry->SetSource (ifAddr.GetLocal ());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   645
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   646
              rtentry->SetGateway (Ipv4Address(gatewayIp));
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   647
              rtentry->SetDestination (header.GetDestination ());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   648
              rtentry->SetOutputDevice (m_ipv4->GetNetDevice (interfaceIndex));
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   649
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   650
              // add rtentry to cache
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   651
              m_ipv4RouteCache.insert(Ipv4RouteMap_t::value_type(header.GetDestination (), rtentry));
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   652
            }
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   653
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   654
          NS_LOG_LOGIC ("Nix-vector contents: " << *nixVectorInCache << " : Remaining bits: " << nixVectorForPacket->GetRemainingBits());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   655
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   656
          // Add  nix-vector in the packet class 
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   657
          // have to copy the packet first b/c 
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   658
          // it is const
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   659
          Ptr<Packet> newPacket = Create<Packet> ();
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   660
          newPacket = p->Copy();
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   661
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   662
          NS_LOG_LOGIC ("Adding Nix-vector to packet: " << *nixVectorForPacket);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   663
          newPacket->SetNixVector(nixVectorForPacket);
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   664
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   665
          // call the unicast callback
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   666
          // local deliver is handled by Ipv4StaticRoutingImpl
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   667
          // so this code is never even called if the packet is
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   668
          // destined for this node.
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   669
          ucb (rtentry, newPacket, header);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   670
          return true;
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   671
        }
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   672
      else // path doesn't exist
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   673
        {
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   674
          NS_LOG_ERROR ("No path to the dest: " << header.GetDestination ());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   675
          return false;
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   676
        }
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   677
    }
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   678
  else
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   679
    {
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   680
      // Get the interface number that we go out of, by extracting
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   681
      // from the nix-vector
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   682
      if (m_totalNeighbors == 0)
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   683
        {
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   684
          m_totalNeighbors = FindTotalNeighbors ();
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   685
        }
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   686
      uint32_t numberOfBits = nixVector->BitCount (m_totalNeighbors);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   687
      uint32_t nodeIndex = nixVector->ExtractNeighborIndex (numberOfBits);
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   688
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   689
      rtentry = GetIpv4RouteInCache (header.GetDestination ());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   690
      // not in cache
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   691
      if (!rtentry)
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   692
        {
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   693
          NS_LOG_LOGIC ("Ipv4Route not in cache, build: ");
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   694
          Ipv4Address gatewayIp;
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   695
          uint32_t index = FindNetDeviceForNixIndex (nodeIndex, gatewayIp);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   696
          uint32_t interfaceIndex = (m_ipv4)->GetInterfaceForDevice(m_node->GetDevice(index));
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   697
          Ipv4InterfaceAddress ifAddr = m_ipv4->GetAddress (interfaceIndex, 0);
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   698
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   699
          // start filling in the Ipv4Route info
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   700
          rtentry = Create<Ipv4Route> ();
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   701
          rtentry->SetSource (ifAddr.GetLocal ());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   702
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   703
          rtentry->SetGateway (gatewayIp);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   704
          rtentry->SetDestination (header.GetDestination ());
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   705
          rtentry->SetOutputDevice (m_ipv4->GetNetDevice (interfaceIndex));
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   706
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   707
          // add rtentry to cache
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   708
          m_ipv4RouteCache.insert(Ipv4RouteMap_t::value_type(header.GetDestination (), rtentry));
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   709
        }
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   710
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   711
      NS_LOG_LOGIC ("At Node " << m_node->GetId() << ", Extracting " << numberOfBits << 
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   712
                           " bits from Nix-vector: " << nixVector << " : " << *nixVector);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   713
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   714
      // call the unicast callback
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   715
      // local deliver is handled by Ipv4StaticRoutingImpl
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   716
      // so this code is never even called if the packet is
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   717
      // destined for this node.
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   718
      ucb (rtentry, p, header);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   719
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   720
      return true;
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   721
    }
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   722
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   723
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   724
// virtual functions from Ipv4RoutingProtocol 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   725
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   726
Ipv4NixVectorRouting::NotifyInterfaceUp (uint32_t i)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   727
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   728
  FlushGlobalNixRoutingCache ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   729
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   730
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   731
Ipv4NixVectorRouting::NotifyInterfaceDown (uint32_t i)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   732
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   733
  FlushGlobalNixRoutingCache ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   734
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   735
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   736
Ipv4NixVectorRouting::NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   737
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   738
  FlushGlobalNixRoutingCache ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   739
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   740
void
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   741
Ipv4NixVectorRouting::NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   742
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   743
  FlushGlobalNixRoutingCache ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   744
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   745
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   746
bool
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   747
Ipv4NixVectorRouting::BFS (uint32_t numberOfNodes, Ptr<Node> source, Ptr<Node> dest, std::vector< Ptr<Node> > & parentVector)
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   748
{
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   749
  NS_LOG_FUNCTION_NOARGS ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   750
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   751
  NS_LOG_LOGIC ("Going from Node " << source->GetId() << " to Node " << dest->GetId());
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   752
  std::queue< Ptr<Node> > greyNodeList;  // discovered nodes with unexplored children
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   753
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   754
  // reset the parent vector
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   755
  parentVector.clear ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   756
  parentVector.reserve (sizeof (Ptr<Node>)*numberOfNodes);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   757
  parentVector.insert (parentVector.begin (), sizeof (Ptr<Node>)*numberOfNodes, 0); // initialize to 0
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   758
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   759
  // Add the source node to the queue, set its parent to itself 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   760
  greyNodeList.push (source);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   761
  parentVector.at (source->GetId()) = source;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   762
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   763
  // BFS loop
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   764
  while (greyNodeList.size () != 0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   765
    {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   766
      Ptr<Node> currNode = greyNodeList.front ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   767
      Ptr<Ipv4> ipv4 = currNode->GetObject<Ipv4> ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   768
 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   769
      if (currNode == dest) 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   770
        {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   771
          NS_LOG_LOGIC ("Made it to Node " << currNode->GetId()); 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   772
          return true;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   773
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   774
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   775
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   776
      // Iterate over the current node's adjacent vertices
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   777
      // and push them into the queue
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   778
      for (uint32_t i = 0; i < (currNode->GetNDevices ()); i++)
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   779
        {
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   780
          // Get a net device from the node
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   781
          // as well as the channel, and figure
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   782
          // out the adjacent net device
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   783
          Ptr<NetDevice> localNetDevice = currNode->GetDevice (i);
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   784
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   785
          // make sure that we can go this way
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   786
          if (ipv4)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   787
            {
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   788
              uint32_t interfaceIndex = (ipv4)->GetInterfaceForDevice(currNode->GetDevice(i));
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   789
              if (!(ipv4->IsUp (interfaceIndex)))
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   790
                {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   791
                  NS_LOG_LOGIC ("Ipv4Interface is down");
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   792
                  continue;
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   793
                }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   794
            }
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   795
            if (!(localNetDevice->IsLinkUp ()))
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   796
              {
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   797
                NS_LOG_LOGIC ("Link is down.");
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   798
                continue;
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   799
              }
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   800
          Ptr<Channel> channel = localNetDevice->GetChannel ();
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   801
          if (channel == 0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   802
            { 
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   803
              continue;
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   804
            }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   805
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   806
          // this function takes in the local net dev, and channnel, and
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   807
          // writes to the netDeviceContainer the adjacent net devs
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   808
          NetDeviceContainer netDeviceContainer;
5899
a46168c7f4a2 Forgot code freeze. Revert nix-vector bug fix for bug 779
Josh Pelkey <jpelkey@gatech.edu>
parents: 5898
diff changeset
   809
          GetAdjacentNetDevices (localNetDevice, channel, netDeviceContainer);
5224
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   810
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   811
          // Finally we can get the adjacent nodes
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   812
          // and scan through them.  We push them
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   813
          // to the greyNode queue, if they aren't 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   814
          // already there.
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   815
          for (NetDeviceContainer::Iterator iter = netDeviceContainer.Begin (); iter != netDeviceContainer.End (); iter++)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   816
            {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   817
              Ptr<Node> remoteNode = (*iter)->GetNode ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   818
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   819
              // check to see if this node has been pushed before
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   820
              // by checking to see if it has a parent
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   821
              // if it doesn't (null or 0), then set its parent and 
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   822
              // push to the queue
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   823
              if (parentVector.at (remoteNode->GetId ()) == 0)
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   824
                {
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   825
                  parentVector.at (remoteNode->GetId ()) = currNode;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   826
                  greyNodeList.push (remoteNode);
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   827
                }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   828
            }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   829
        }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   830
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   831
      // Pop off the head grey node.  We have all its children.
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   832
      // It is now black.
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   833
      greyNodeList.pop ();
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   834
    }
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   835
  
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   836
  // Didn't find the dest...
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   837
  return false;
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   838
}
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   839
06f639d05b8f Merge NixVector Routing code
Josh Pelkey <jpelkey@gatech.edu>
parents:
diff changeset
   840
} // namespace ns3