src/routing/global-routing/global-router-interface.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 13 Mar 2008 12:56:49 -0700
changeset 2602 d9262bff6df2
parent 2257 71a58e70c671
child 2827 4bcc29436feb
permissions -rw-r--r--
add back support for introspected doxygen.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     2
/*
1457
562a7017ed93 Copyrights/licenses for routing code
Tom Henderson <tomh@tomh.org>
parents: 1278
diff changeset
     3
 * Copyright 2007 University of Washington
562a7017ed93 Copyrights/licenses for routing code
Tom Henderson <tomh@tomh.org>
parents: 1278
diff changeset
     4
 * 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     8
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    12
 * GNU General Public License for more details.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    13
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
1457
562a7017ed93 Copyrights/licenses for routing code
Tom Henderson <tomh@tomh.org>
parents: 1278
diff changeset
    17
 *
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
    18
 * Authors:  Tom Henderson (tomhend@u.washington.edu)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    19
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    20
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
    21
#include "ns3/log.h"
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    22
#include "ns3/assert.h"
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    23
#include "ns3/channel.h"
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    24
#include "ns3/net-device.h"
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    25
#include "ns3/internet-node.h"
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    26
#include "ns3/ipv4.h"
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    27
#include "global-router-interface.h"
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    28
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
    29
NS_LOG_COMPONENT_DEFINE ("GlobalRouter");
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    30
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    31
namespace ns3 {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    32
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    33
// ---------------------------------------------------------------------------
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    34
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
    35
// GlobalRoutingLinkRecord Implementation
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    36
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    37
// ---------------------------------------------------------------------------
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    38
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
    39
GlobalRoutingLinkRecord::GlobalRoutingLinkRecord ()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    40
:
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    41
  m_linkId ("0.0.0.0"),
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    42
  m_linkData ("0.0.0.0"),
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    43
  m_linkType (Unknown),
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    44
  m_metric (0)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    45
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
    46
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    47
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    48
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
    49
GlobalRoutingLinkRecord::GlobalRoutingLinkRecord (
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    50
  LinkType    linkType, 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    51
  Ipv4Address linkId, 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    52
  Ipv4Address linkData, 
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
    53
  uint16_t    metric)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    54
:
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    55
  m_linkId (linkId),
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    56
  m_linkData (linkData),
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    57
  m_linkType (linkType),
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    58
  m_metric (metric)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    59
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
    60
  NS_LOG_FUNCTION;
1828
6ab68edddf45 nicer logging of parameters (bug 79 patch from Gustavo)
Tom Henderson <tomh@tomh.org>
parents: 1776
diff changeset
    61
  NS_LOG_PARAMS (this << linkType << linkId << linkData << metric);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    62
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    63
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
    64
GlobalRoutingLinkRecord::~GlobalRoutingLinkRecord ()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    65
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
    66
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    67
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    68
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    69
  Ipv4Address
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
    70
GlobalRoutingLinkRecord::GetLinkId (void) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    71
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
    72
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    73
  return m_linkId;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    74
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    75
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    76
  void
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
    77
GlobalRoutingLinkRecord::SetLinkId (Ipv4Address addr)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    78
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
    79
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    80
  m_linkId = addr;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    81
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    82
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    83
  Ipv4Address
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
    84
GlobalRoutingLinkRecord::GetLinkData (void) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    85
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
    86
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    87
  return m_linkData;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    88
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    89
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    90
  void
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
    91
GlobalRoutingLinkRecord::SetLinkData (Ipv4Address addr)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    92
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
    93
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    94
  m_linkData = addr;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    95
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    96
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
    97
  GlobalRoutingLinkRecord::LinkType
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
    98
GlobalRoutingLinkRecord::GetLinkType (void) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    99
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   100
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   101
  return m_linkType;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   102
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   103
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   104
  void
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   105
GlobalRoutingLinkRecord::SetLinkType (
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   106
  GlobalRoutingLinkRecord::LinkType linkType)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   107
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   108
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   109
  m_linkType = linkType;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   110
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   111
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
   112
  uint16_t
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   113
GlobalRoutingLinkRecord::GetMetric (void) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   114
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   115
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   116
  return m_metric;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   117
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   118
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   119
  void
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
   120
GlobalRoutingLinkRecord::SetMetric (uint16_t metric)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   121
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   122
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   123
  m_metric = metric;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   124
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   125
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   126
// ---------------------------------------------------------------------------
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   127
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   128
// GlobalRoutingLSA Implementation
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   129
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   130
// ---------------------------------------------------------------------------
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   131
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   132
GlobalRoutingLSA::GlobalRoutingLSA()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   133
  : 
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   134
  m_lsType (GlobalRoutingLSA::Unknown),
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   135
  m_linkStateId("0.0.0.0"),
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   136
  m_advertisingRtr("0.0.0.0"),
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   137
  m_linkRecords(),
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   138
  m_networkLSANetworkMask("0.0.0.0"),
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   139
  m_attachedRouters(),
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   140
  m_status(GlobalRoutingLSA::LSA_SPF_NOT_EXPLORED)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   141
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   142
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   143
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   144
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   145
GlobalRoutingLSA::GlobalRoutingLSA (
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   146
  GlobalRoutingLSA::SPFStatus status,
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   147
  Ipv4Address linkStateId, 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   148
  Ipv4Address advertisingRtr)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   149
:
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   150
  m_lsType (GlobalRoutingLSA::Unknown),
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   151
  m_linkStateId(linkStateId),
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   152
  m_advertisingRtr(advertisingRtr),
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   153
  m_linkRecords(),
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   154
  m_networkLSANetworkMask("0.0.0.0"),
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   155
  m_attachedRouters(),
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   156
  m_status(status)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   157
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   158
  NS_LOG_FUNCTION;
1828
6ab68edddf45 nicer logging of parameters (bug 79 patch from Gustavo)
Tom Henderson <tomh@tomh.org>
parents: 1776
diff changeset
   159
  NS_LOG_PARAMS (this << status << linkStateId << advertisingRtr);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   160
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   161
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   162
GlobalRoutingLSA::GlobalRoutingLSA (GlobalRoutingLSA& lsa)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   163
  : m_lsType(lsa.m_lsType), m_linkStateId(lsa.m_linkStateId), 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   164
    m_advertisingRtr(lsa.m_advertisingRtr), 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   165
    m_networkLSANetworkMask(lsa.m_networkLSANetworkMask), 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   166
    m_status(lsa.m_status)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   167
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   168
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   169
  NS_ASSERT_MSG(IsEmpty(), 
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   170
    "GlobalRoutingLSA::GlobalRoutingLSA (): Non-empty LSA in constructor");
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   171
  CopyLinkRecords (lsa);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   172
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   173
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   174
  GlobalRoutingLSA&
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   175
GlobalRoutingLSA::operator= (const GlobalRoutingLSA& lsa)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   176
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   177
  NS_LOG_FUNCTION;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   178
  m_lsType = lsa.m_lsType;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   179
  m_linkStateId = lsa.m_linkStateId;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   180
  m_advertisingRtr = lsa.m_advertisingRtr;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   181
  m_networkLSANetworkMask = lsa.m_networkLSANetworkMask, 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   182
  m_status = lsa.m_status;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   183
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   184
  ClearLinkRecords ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   185
  CopyLinkRecords (lsa);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   186
  return *this;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   187
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   188
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   189
  void
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   190
GlobalRoutingLSA::CopyLinkRecords (const GlobalRoutingLSA& lsa)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   191
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   192
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   193
  for (ListOfLinkRecords_t::const_iterator i = lsa.m_linkRecords.begin ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   194
       i != lsa.m_linkRecords.end (); 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   195
       i++)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   196
    {
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   197
      GlobalRoutingLinkRecord *pSrc = *i;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   198
      GlobalRoutingLinkRecord *pDst = new GlobalRoutingLinkRecord;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   199
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   200
      pDst->SetLinkType (pSrc->GetLinkType ());
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   201
      pDst->SetLinkId (pSrc->GetLinkId ());
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   202
      pDst->SetLinkData (pSrc->GetLinkData ());
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
   203
      pDst->SetMetric (pSrc->GetMetric ());
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   204
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   205
      m_linkRecords.push_back(pDst);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   206
      pDst = 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   207
    }
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   208
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   209
   m_attachedRouters = lsa.m_attachedRouters;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   210
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   211
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   212
GlobalRoutingLSA::~GlobalRoutingLSA()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   213
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   214
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   215
  ClearLinkRecords ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   216
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   217
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   218
  void
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   219
GlobalRoutingLSA::ClearLinkRecords(void)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   220
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   221
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   222
  for ( ListOfLinkRecords_t::iterator i = m_linkRecords.begin ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   223
        i != m_linkRecords.end (); 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   224
        i++)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   225
    {
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   226
      NS_LOG_LOGIC ("Free link record");
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   227
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   228
      GlobalRoutingLinkRecord *p = *i;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   229
      delete p;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   230
      p = 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   231
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   232
      *i = 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   233
    }
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   234
  NS_LOG_LOGIC ("Clear list");
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   235
  m_linkRecords.clear();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   236
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   237
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   238
  uint32_t
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   239
GlobalRoutingLSA::AddLinkRecord (GlobalRoutingLinkRecord* lr)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   240
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   241
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   242
  m_linkRecords.push_back (lr);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   243
  return m_linkRecords.size ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   244
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   245
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   246
  uint32_t
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   247
GlobalRoutingLSA::GetNLinkRecords (void) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   248
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   249
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   250
  return m_linkRecords.size ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   251
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   252
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   253
  GlobalRoutingLinkRecord *
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   254
GlobalRoutingLSA::GetLinkRecord (uint32_t n) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   255
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   256
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   257
  uint32_t j = 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   258
  for ( ListOfLinkRecords_t::const_iterator i = m_linkRecords.begin ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   259
        i != m_linkRecords.end (); 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   260
        i++, j++)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   261
    {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   262
      if (j == n) 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   263
        {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   264
          return *i;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   265
        }
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   266
    }
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   267
  NS_ASSERT_MSG(false, "GlobalRoutingLSA::GetLinkRecord (): invalid index");
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   268
  return 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   269
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   270
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   271
  bool
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   272
GlobalRoutingLSA::IsEmpty (void) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   273
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   274
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   275
  return m_linkRecords.size () == 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   276
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   277
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   278
  GlobalRoutingLSA::LSType
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   279
GlobalRoutingLSA::GetLSType (void) const
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   280
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   281
  NS_LOG_FUNCTION;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   282
  return m_lsType;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   283
}
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   284
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   285
  void 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   286
GlobalRoutingLSA::SetLSType (GlobalRoutingLSA::LSType typ) 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   287
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   288
  NS_LOG_FUNCTION;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   289
  m_lsType = typ;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   290
}
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   291
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   292
  Ipv4Address
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   293
GlobalRoutingLSA::GetLinkStateId (void) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   294
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   295
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   296
  return m_linkStateId;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   297
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   298
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   299
  void
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   300
GlobalRoutingLSA::SetLinkStateId (Ipv4Address addr)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   301
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   302
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   303
  m_linkStateId = addr;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   304
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   305
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   306
  Ipv4Address
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   307
GlobalRoutingLSA::GetAdvertisingRouter (void) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   308
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   309
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   310
  return m_advertisingRtr;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   311
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   312
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   313
  void
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   314
GlobalRoutingLSA::SetAdvertisingRouter (Ipv4Address addr)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   315
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   316
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   317
  m_advertisingRtr = addr;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   318
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   319
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   320
  void 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   321
GlobalRoutingLSA::SetNetworkLSANetworkMask (Ipv4Mask mask)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   322
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   323
  NS_LOG_FUNCTION;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   324
  m_networkLSANetworkMask = mask;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   325
}
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   326
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   327
  Ipv4Mask 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   328
GlobalRoutingLSA::GetNetworkLSANetworkMask (void) const
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   329
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   330
  NS_LOG_FUNCTION;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   331
  return m_networkLSANetworkMask;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   332
}
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   333
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   334
  GlobalRoutingLSA::SPFStatus
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   335
GlobalRoutingLSA::GetStatus (void) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   336
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   337
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   338
  return m_status;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   339
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   340
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   341
  uint32_t 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   342
GlobalRoutingLSA::AddAttachedRouter (Ipv4Address addr)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   343
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   344
  NS_LOG_FUNCTION;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   345
  m_attachedRouters.push_back (addr);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   346
  return m_attachedRouters.size ();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   347
}
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   348
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   349
  uint32_t 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   350
GlobalRoutingLSA::GetNAttachedRouters (void) const
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   351
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   352
  NS_LOG_FUNCTION;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   353
  return m_attachedRouters.size (); 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   354
}
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   355
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   356
  Ipv4Address 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   357
GlobalRoutingLSA::GetAttachedRouter (uint32_t n) const
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   358
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   359
  NS_LOG_FUNCTION;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   360
  uint32_t j = 0;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   361
  for ( ListOfAttachedRouters_t::const_iterator i = m_attachedRouters.begin ();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   362
        i != m_attachedRouters.end (); 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   363
        i++, j++)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   364
    {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   365
      if (j == n) 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   366
        {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   367
          return *i;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   368
        }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   369
    }
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   370
  NS_ASSERT_MSG(false, 
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   371
    "GlobalRoutingLSA::GetAttachedRouter (): invalid index");
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   372
  return Ipv4Address("0.0.0.0");
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   373
}
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   374
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   375
  void
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   376
GlobalRoutingLSA::SetStatus (GlobalRoutingLSA::SPFStatus status)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   377
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   378
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   379
  m_status = status;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   380
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   381
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   382
  void 
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   383
GlobalRoutingLSA::Print (std::ostream &os) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   384
{
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   385
  os << "m_lsType = " << m_lsType << std::endl <<
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   386
        "m_linkStateId = " << m_linkStateId << std::endl <<
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   387
        "m_advertisingRtr = " << m_advertisingRtr << std::endl;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   388
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   389
  if (m_lsType == GlobalRoutingLSA::RouterLSA) 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   390
    {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   391
      for ( ListOfLinkRecords_t::const_iterator i = m_linkRecords.begin ();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   392
            i != m_linkRecords.end (); 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   393
            i++)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   394
        {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   395
          GlobalRoutingLinkRecord *p = *i;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   396
          os << "----------" << std::endl;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   397
          os << "m_linkId = " << p->GetLinkId () << std::endl;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   398
          os << "m_linkData = " << p->GetLinkData () << std::endl;
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
   399
          os << "m_metric = " << p->GetMetric () << std::endl;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   400
        }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   401
    }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   402
  else if (m_lsType == GlobalRoutingLSA::NetworkLSA) 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   403
    {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   404
      os << "----------" << std::endl;
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   405
      os << "m_networkLSANetworkMask = " << m_networkLSANetworkMask 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   406
         << std::endl;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   407
      for ( ListOfAttachedRouters_t::const_iterator i = 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   408
            m_attachedRouters.begin ();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   409
            i != m_attachedRouters.end (); 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   410
            i++)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   411
        {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   412
          Ipv4Address p = *i;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   413
          os << "attachedRouter = " << p << std::endl;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   414
        }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   415
    }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   416
  else 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   417
    {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   418
      NS_ASSERT_MSG(0, "Illegal LSA LSType: " << m_lsType);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   419
    }
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   420
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   421
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   422
std::ostream& operator<< (std::ostream& os, GlobalRoutingLSA& lsa)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   423
{
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   424
  lsa.Print (os);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   425
  return os;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   426
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   427
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   428
// ---------------------------------------------------------------------------
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   429
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   430
// GlobalRouter Implementation
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   431
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   432
// ---------------------------------------------------------------------------
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   433
2249
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
   434
NS_OBJECT_ENSURE_REGISTERED (GlobalRouter);
3a1da26d61dc replace ComponentManager::Create and ClassId with InterfaceId::CreateObjest and InterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2238
diff changeset
   435
2250
18f432098389 InterfaceId -> TypeId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2249
diff changeset
   436
TypeId 
2251
04963d8cca51 iid (void) -> GetTypeId (void)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2250
diff changeset
   437
GlobalRouter::GetTypeId (void)
2232
9abd038ee588 replace static const Interface iid; with static InterfaceId iid (void);
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2231
diff changeset
   438
{
2602
d9262bff6df2 add back support for introspected doxygen.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2257
diff changeset
   439
  static TypeId tid = TypeId ("ns3::GlobalRouter")
2238
05affd9d0dc1 get rid of MakeInterfaceId
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2232
diff changeset
   440
    .SetParent<Object> ();
2252
80595448707a iid -> tid
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2251
diff changeset
   441
  return tid;
2232
9abd038ee588 replace static const Interface iid; with static InterfaceId iid (void);
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2231
diff changeset
   442
}
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   443
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   444
GlobalRouter::GlobalRouter ()
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   445
  : m_LSAs()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   446
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   447
  NS_LOG_FUNCTION;
1113
5b63b39161e7 remove routing environment, move router interface creation to global-route-manager
Craig Dowell <craigdo@ee.washington.edu>
parents: 1111
diff changeset
   448
  m_routerId.Set(GlobalRouteManager::AllocateRouterId ());
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   449
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   450
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   451
GlobalRouter::~GlobalRouter ()
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   452
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   453
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   454
  ClearLSAs();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   455
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   456
1202
953cc2fadcef fix memory leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1123
diff changeset
   457
void
953cc2fadcef fix memory leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1123
diff changeset
   458
GlobalRouter::DoDispose ()
953cc2fadcef fix memory leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1123
diff changeset
   459
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   460
  NS_LOG_FUNCTION;
1202
953cc2fadcef fix memory leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1123
diff changeset
   461
  Object::DoDispose ();
953cc2fadcef fix memory leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1123
diff changeset
   462
}
953cc2fadcef fix memory leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1123
diff changeset
   463
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   464
  void
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   465
GlobalRouter::ClearLSAs ()
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   466
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   467
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   468
  for ( ListOfLSAs_t::iterator i = m_LSAs.begin ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   469
        i != m_LSAs.end (); 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   470
        i++)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   471
    {
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   472
      NS_LOG_LOGIC ("Free LSA");
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   473
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   474
      GlobalRoutingLSA *p = *i;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   475
      delete p;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   476
      p = 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   477
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   478
      *i = 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   479
    }
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   480
  NS_LOG_LOGIC ("Clear list");
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   481
  m_LSAs.clear();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   482
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   483
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   484
  Ipv4Address
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   485
GlobalRouter::GetRouterId (void) const
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   486
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   487
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   488
  return m_routerId;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   489
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   490
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   491
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   492
// Go out and discover any adjacent routers and build the Link State 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   493
// Advertisements that reflect them and their associated networks.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   494
// 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   495
  uint32_t 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   496
GlobalRouter::DiscoverLSAs (void)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   497
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   498
  NS_LOG_FUNCTION;
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2252
diff changeset
   499
  Ptr<Node> node = GetObject<Node> ();
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   500
  NS_LOG_LOGIC("For node " << node->GetId () );
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   501
  NS_ASSERT_MSG(node, 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   502
    "GlobalRouter::DiscoverLSAs (): <Node> interface not set");
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   503
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   504
  ClearLSAs ();
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   505
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   506
// While building the router-LSA, keep a list of those NetDevices for
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   507
// which I am the designated router and need to later build a NetworkLSA
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   508
  std::list<Ptr<NetDevice> > listOfDRInterfaces;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   509
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   510
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   511
// We're aggregated to a node.  We need to ask the node for a pointer to its
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   512
// Ipv4 interface.  This is where the information regarding the attached 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   513
// interfaces lives.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   514
//
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2252
diff changeset
   515
  Ptr<Ipv4> ipv4Local = node->GetObject<Ipv4> ();
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   516
  NS_ASSERT_MSG(ipv4Local, 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   517
    "GlobalRouter::DiscoverLSAs (): QI for <Ipv4> interface failed");
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   518
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   519
// Each node originates a Router-LSA
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   520
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   521
  GlobalRoutingLSA *pLSA = new GlobalRoutingLSA;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   522
  pLSA->SetLSType (GlobalRoutingLSA::RouterLSA);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   523
  pLSA->SetLinkStateId (m_routerId);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   524
  pLSA->SetAdvertisingRouter (m_routerId);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   525
  pLSA->SetStatus (GlobalRoutingLSA::LSA_SPF_NOT_EXPLORED);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   526
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   527
// We need to ask the node for the number of net devices attached. This isn't
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   528
// necessarily equal to the number of links to adjacent nodes (other routers)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   529
// as the number of devices may include those for stub networks (e.g., 
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   530
// ethernets, etc.).  
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   531
//
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   532
  uint32_t numDevices = node->GetNDevices();
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   533
  NS_LOG_LOGIC ("numDevices = " << numDevices);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   534
  for (uint32_t i = 0; i < numDevices; ++i)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   535
    {
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   536
      Ptr<NetDevice> ndLocal = node->GetDevice(i);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   537
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   538
      if (ndLocal->IsBroadcast () && !ndLocal->IsPointToPoint () )
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   539
        {
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   540
          NS_LOG_LOGIC ("Broadcast link");
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   541
          GlobalRoutingLinkRecord *plr = new GlobalRoutingLinkRecord;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   542
//
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   543
// We need to determine whether we are on a transit or stub network
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   544
// If we find at least one more router on this channel, we are a transit
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   545
//
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   546
//
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   547
// Now, we have to find the Ipv4 interface whose netdevice is the one we 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   548
// just found.  This is still the IP on the local side of the channel.  There 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   549
// is a function to do this used down in the guts of the stack, but it's not 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   550
// exported so we had to whip up an equivalent.
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   551
//
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   552
          uint32_t ifIndexLocal = FindIfIndexForDevice(node, ndLocal);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   553
          Ipv4Address addrLocal = ipv4Local->GetAddress(ifIndexLocal);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   554
          Ipv4Mask maskLocal = ipv4Local->GetNetworkMask(ifIndexLocal);
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   555
          NS_LOG_LOGIC ("Working with local address " << addrLocal);
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
   556
          uint16_t metricLocal = ipv4Local->GetMetric (ifIndexLocal);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   557
//
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   558
// Now, we're going to walk over to the remote net device on the other end of 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   559
// the point-to-point channel we now know we have.  This is where our adjacent 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   560
// router (to use OSPF lingo) is running.  
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   561
//
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   562
          Ptr<Channel> ch = ndLocal->GetChannel();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   563
          uint32_t nDevices = ch->GetNDevices();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   564
          if (nDevices == 1)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   565
            {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   566
              // This is a stub broadcast interface
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   567
              NS_LOG_LOGIC("Router-LSA stub broadcast link");
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   568
              // XXX in future, need to consider if >1 includes other routers
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   569
              plr->SetLinkType (GlobalRoutingLinkRecord::StubNetwork);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   570
              // Link ID is IP network number of attached network
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   571
              plr->SetLinkId (addrLocal.CombineMask(maskLocal));
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   572
              // Link Data is network mask; convert to Ipv4Address
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   573
              Ipv4Address maskLocalAddr;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   574
              maskLocalAddr.Set(maskLocal.GetHostOrder ());
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   575
              plr->SetLinkData (maskLocalAddr);
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
   576
              plr->SetMetric (metricLocal);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   577
              pLSA->AddLinkRecord(plr);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   578
              plr = 0;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   579
              continue;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   580
            }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   581
          else
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   582
            {
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   583
              NS_LOG_LOGIC ("Router-LSA Broadcast link");
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   584
              // multiple routers on a broadcast interface
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   585
              // lowest IP address is designated router
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   586
              plr->SetLinkType (GlobalRoutingLinkRecord::TransitNetwork);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   587
              // Link ID is IP interface address of designated router
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   588
              Ipv4Address desigRtr = 
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   589
                FindDesignatedRouterForLink (node, ndLocal);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   590
              if (desigRtr == addrLocal) 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   591
                {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   592
                  listOfDRInterfaces.push_back (ndLocal);
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   593
                  NS_LOG_LOGIC (node->GetId () << " is a DR");
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   594
                }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   595
              plr->SetLinkId (desigRtr);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   596
              // Link Data is router's own IP address
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   597
              plr->SetLinkData (addrLocal);
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
   598
              plr->SetMetric (metricLocal);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   599
              pLSA->AddLinkRecord (plr);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   600
              plr = 0;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   601
              continue;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   602
            }
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   603
        }
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   604
      else if (ndLocal->IsPointToPoint () )
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   605
        {
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   606
          NS_LOG_LOGIC ("Router-LSA Point-to-point device");
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   607
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   608
// Now, we have to find the Ipv4 interface whose netdevice is the one we 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   609
// just found.  This is still the IP on the local side of the channel.  There 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   610
// is a function to do this used down in the guts of the stack, but it's not 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   611
// exported so we had to whip up an equivalent.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   612
//
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   613
          uint32_t ifIndexLocal = FindIfIndexForDevice(node, ndLocal);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   614
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   615
// Now that we have the Ipv4 interface index, we can get the address and mask
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   616
// we need.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   617
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   618
          Ipv4Address addrLocal = ipv4Local->GetAddress(ifIndexLocal);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   619
          Ipv4Mask maskLocal = ipv4Local->GetNetworkMask(ifIndexLocal);
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   620
          NS_LOG_LOGIC ("Working with local address " << addrLocal);
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
   621
          uint16_t metricLocal = ipv4Local->GetMetric (ifIndexLocal);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   622
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   623
// Now, we're going to walk over to the remote net device on the other end of 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   624
// the point-to-point channel we now know we have.  This is where our adjacent 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   625
// router (to use OSPF lingo) is running.  
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   626
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   627
          Ptr<Channel> ch = ndLocal->GetChannel();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   628
          Ptr<NetDevice> ndRemote = GetAdjacent(ndLocal, ch);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   629
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   630
// The adjacent net device is aggregated to a node.  We need to ask that net 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   631
// device for its node, then ask that node for its Ipv4 interface.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   632
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   633
          Ptr<Node> nodeRemote = ndRemote->GetNode();
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2252
diff changeset
   634
          Ptr<Ipv4> ipv4Remote = nodeRemote->GetObject<Ipv4> ();
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   635
          NS_ASSERT_MSG(ipv4Remote, 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   636
            "GlobalRouter::DiscoverLSAs (): QI for remote <Ipv4> failed");
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   637
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   638
// Per the OSPF spec, we're going to need the remote router ID, so we might as
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   639
// well get it now.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   640
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   641
          Ptr<GlobalRouter> srRemote = 
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2252
diff changeset
   642
            nodeRemote->GetObject<GlobalRouter> ();
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   643
          NS_ASSERT_MSG(srRemote, 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   644
            "GlobalRouter::DiscoverLSAs():QI for remote <GlobalRouter> failed");
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   645
          Ipv4Address rtrIdRemote = srRemote->GetRouterId();
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   646
          NS_LOG_LOGIC ("Working with remote router " << rtrIdRemote);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   647
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   648
// Now, just like we did above, we need to get the IP interface index for the 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   649
// net device on the other end of the point-to-point channel.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   650
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   651
          uint32_t ifIndexRemote = FindIfIndexForDevice(nodeRemote, ndRemote);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   652
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   653
// Now that we have the Ipv4 interface, we can get the (remote) address and
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   654
// mask we need.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   655
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   656
          Ipv4Address addrRemote = ipv4Remote->GetAddress(ifIndexRemote);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   657
          Ipv4Mask maskRemote = ipv4Remote->GetNetworkMask(ifIndexRemote);
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   658
          NS_LOG_LOGIC ("Working with remote address " << addrRemote);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   659
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   660
// Now we can fill out the link records for this link.  There are always two
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   661
// link records; the first is a point-to-point record describing the link and
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   662
// the second is a stub network record with the network number.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   663
//
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   664
          GlobalRoutingLinkRecord *plr = new GlobalRoutingLinkRecord;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   665
          plr->SetLinkType (GlobalRoutingLinkRecord::PointToPoint);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   666
          plr->SetLinkId (rtrIdRemote);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   667
          plr->SetLinkData (addrLocal);
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
   668
          plr->SetMetric (metricLocal);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   669
          pLSA->AddLinkRecord (plr);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   670
          plr = 0;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   671
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   672
          plr = new GlobalRoutingLinkRecord;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   673
          plr->SetLinkType (GlobalRoutingLinkRecord::StubNetwork);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   674
          plr->SetLinkId (addrRemote);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   675
          plr->SetLinkData (Ipv4Address(maskRemote.GetHostOrder()));  // Frown
1776
0d5be0c3d229 Add support for non-unit-cost metrics for Ipv4Interfaces (for use in routing); add example script simple-alternate-routing.cc
Tom Henderson <tomh@tomh.org>
parents: 1505
diff changeset
   676
          plr->SetMetric (metricLocal);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   677
          pLSA->AddLinkRecord (plr);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   678
          plr = 0;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   679
        }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   680
      else
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   681
        {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   682
          NS_ASSERT_MSG(0, "GlobalRouter::DiscoverLSAs (): unknown link type");
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   683
        }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   684
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   685
    }
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   686
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   687
// The LSA goes on a list of LSAs in case we want to begin exporting other
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   688
// kinds of advertisements (than Router LSAs).
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   689
  m_LSAs.push_back (pLSA);
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   690
  NS_LOG_LOGIC (*pLSA);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   691
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   692
// Now, determine whether we need to build a NetworkLSA
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   693
  if (listOfDRInterfaces.size () > 0)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   694
    {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   695
      for (std::list<Ptr<NetDevice> >::iterator i = listOfDRInterfaces.begin ();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   696
        i != listOfDRInterfaces.end (); i++)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   697
        {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   698
// Build one NetworkLSA for each interface that is a DR
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   699
          Ptr<NetDevice> ndLocal = *i;
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1828
diff changeset
   700
          uint32_t ifIndexLocal = FindIfIndexForDevice(node, ndLocal);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   701
          Ipv4Address addrLocal = ipv4Local->GetAddress(ifIndexLocal);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   702
          Ipv4Mask maskLocal = ipv4Local->GetNetworkMask(ifIndexLocal);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   703
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   704
          GlobalRoutingLSA *pLSA = new GlobalRoutingLSA;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   705
          pLSA->SetLSType (GlobalRoutingLSA::NetworkLSA);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   706
          pLSA->SetLinkStateId (addrLocal);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   707
          pLSA->SetAdvertisingRouter (m_routerId);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   708
          pLSA->SetNetworkLSANetworkMask (maskLocal);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   709
          pLSA->SetStatus (GlobalRoutingLSA::LSA_SPF_NOT_EXPLORED);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   710
// Build list of AttachedRouters
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   711
          Ptr<Channel> ch = ndLocal->GetChannel();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   712
          uint32_t nDevices = ch->GetNDevices();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   713
          NS_ASSERT (nDevices);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   714
          for (uint32_t i = 0; i < nDevices; i++)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   715
            {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   716
              Ptr<NetDevice> tempNd = ch->GetDevice (i);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   717
              NS_ASSERT (tempNd);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   718
              Ptr<Node> tempNode = tempNd->GetNode ();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   719
              uint32_t tempIfIndex = FindIfIndexForDevice (tempNode, tempNd);
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2252
diff changeset
   720
              Ptr<Ipv4> tempIpv4 = tempNode->GetObject<Ipv4> ();
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   721
              NS_ASSERT (tempIpv4);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   722
              Ipv4Address tempAddr = tempIpv4->GetAddress(tempIfIndex);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   723
              pLSA->AddAttachedRouter (tempAddr);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   724
            }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   725
          m_LSAs.push_back (pLSA);
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   726
          NS_LOG_LOGIC (*pLSA);
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   727
        }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   728
    }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   729
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   730
  return m_LSAs.size ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   731
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   732
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   733
  Ipv4Address
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   734
GlobalRouter::FindDesignatedRouterForLink (Ptr<Node> node, 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   735
  Ptr<NetDevice> ndLocal) const
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   736
{
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   737
  uint32_t ifIndexLocal = FindIfIndexForDevice(node, ndLocal);
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2252
diff changeset
   738
  Ptr<Ipv4> ipv4Local = GetObject<Ipv4> ();
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   739
  NS_ASSERT (ipv4Local);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   740
  Ipv4Address addrLocal = ipv4Local->GetAddress(ifIndexLocal);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   741
  Ipv4Mask maskLocal = ipv4Local->GetNetworkMask(ifIndexLocal);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   742
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   743
  Ptr<Channel> ch = ndLocal->GetChannel();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   744
  uint32_t nDevices = ch->GetNDevices();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   745
  NS_ASSERT (nDevices);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   746
  Ipv4Address lowest = addrLocal;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   747
  // iterate all NetDevices and return the lowest numbered IP address 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   748
  for (uint32_t i = 0; i < nDevices; i++)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   749
    {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   750
      Ptr<NetDevice> tempNd = ch->GetDevice (i);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   751
      NS_ASSERT (tempNd);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   752
      Ptr<Node> tempNode = tempNd->GetNode ();
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   753
      uint32_t tempIfIndex = FindIfIndexForDevice (tempNode, tempNd);
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2252
diff changeset
   754
      Ptr<Ipv4> tempIpv4 = tempNode->GetObject<Ipv4> ();
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   755
      NS_ASSERT (tempIpv4);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   756
      Ipv4Address tempAddr = tempIpv4->GetAddress(tempIfIndex);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   757
      if (tempAddr < addrLocal)
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   758
        {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   759
          addrLocal = tempAddr;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   760
        }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   761
    }
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   762
  return addrLocal;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   763
}
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   764
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   765
  uint32_t 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   766
GlobalRouter::GetNumLSAs (void) const
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   767
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   768
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   769
  return m_LSAs.size ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   770
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   771
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   772
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   773
// Get the nth link state advertisement from this router.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   774
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   775
  bool
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   776
GlobalRouter::GetLSA (uint32_t n, GlobalRoutingLSA &lsa) const
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   777
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   778
  NS_LOG_FUNCTION;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   779
  NS_ASSERT_MSG(lsa.IsEmpty(), "GlobalRouter::GetLSA (): Must pass empty LSA");
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   780
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   781
// All of the work was done in GetNumLSAs.  All we have to do here is to
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   782
// walk the list of link state advertisements created there and return the 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   783
// one the client is interested in.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   784
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   785
  ListOfLSAs_t::const_iterator i = m_LSAs.begin ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   786
  uint32_t j = 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   787
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   788
  for (; i != m_LSAs.end (); i++, j++)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   789
    {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   790
      if (j == n)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   791
        {
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1202
diff changeset
   792
          GlobalRoutingLSA *p = *i;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   793
          lsa = *p;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   794
          return true;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   795
        }
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   796
    }
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   797
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   798
  return false;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   799
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   800
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   801
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   802
// Link through the given channel and find the net device that's on the
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   803
// other end.  This only makes sense with a point-to-point channel.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   804
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   805
  Ptr<NetDevice>
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   806
GlobalRouter::GetAdjacent(Ptr<NetDevice> nd, Ptr<Channel> ch) const
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   807
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   808
  NS_LOG_FUNCTION;
1123
f7a27e1a6744 fix optimized build
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1121
diff changeset
   809
  NS_ASSERT_MSG(ch->GetNDevices() == 2, 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   810
    "GlobalRouter::GetAdjacent (): Channel with other than two devices");
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   811
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   812
// This is a point to point channel with two endpoints.  Get both of them.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   813
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   814
  Ptr<NetDevice> nd1 = ch->GetDevice(0);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   815
  Ptr<NetDevice> nd2 = ch->GetDevice(1);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   816
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   817
// One of the endpoints is going to be "us" -- that is the net device attached
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   818
// to the node on which we're running -- i.e., "nd".  The other endpoint (the
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   819
// one to which we are connected via the channel) is the adjacent router.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   820
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   821
  if (nd1 == nd)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   822
    {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   823
      return nd2;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   824
    }
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   825
  else if (nd2 == nd)
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   826
    {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   827
      return nd1;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   828
    }
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   829
  else
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   830
    {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   831
      NS_ASSERT_MSG(false,
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   832
        "GlobalRouter::GetAdjacent (): Wrong or confused channel?");
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   833
      return 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   834
    }
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   835
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   836
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   837
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   838
// Given a node and a net device, find the IPV4 interface index that 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   839
// corresponds to that net device.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   840
//
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   841
  uint32_t
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   842
GlobalRouter::FindIfIndexForDevice(Ptr<Node> node, Ptr<NetDevice> nd) const
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   843
{
1505
286ec92f4113 debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1457
diff changeset
   844
  NS_LOG_FUNCTION;
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2252
diff changeset
   845
  Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   846
  NS_ASSERT_MSG(ipv4, "QI for <Ipv4> interface failed");
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   847
  for (uint32_t i = 0; i < ipv4->GetNInterfaces(); ++i )
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   848
    {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   849
      if (ipv4->GetNetDevice(i) == nd) 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   850
        {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   851
          return i;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   852
        }
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   853
    }
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   854
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   855
  NS_ASSERT_MSG(0, "Cannot find interface for device");
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   856
  return 0;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   857
}
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   858
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   859
} // namespace ns3