src/routing/global-routing/global-router-interface.h
author Craig Dowell <craigdo@ee.washington.edu>
Wed, 19 Nov 2008 21:21:14 -0800
changeset 3939 206f627bd5af
parent 3938 972310213d07
child 3940 49b432aefbd0
permissions -rw-r--r--
factor DiscoverLSAs into understandable modules
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: 1280
diff changeset
     3
 * Copyright 2007 University of Washington
562a7017ed93 Copyrights/licenses for routing code
Tom Henderson <tomh@tomh.org>
parents: 1280
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: 1280
diff changeset
    17
 *
562a7017ed93 Copyrights/licenses for routing code
Tom Henderson <tomh@tomh.org>
parents: 1280
diff changeset
    18
 * Authors:  Craig Dowell (craigdo@ee.washington.edu)
562a7017ed93 Copyrights/licenses for routing code
Tom Henderson <tomh@tomh.org>
parents: 1280
diff changeset
    19
 *           Tom Henderson (tomhend@u.washington.edu)
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    20
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    21
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
    22
#ifndef GLOBAL_ROUTER_INTERFACE_H
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
    23
#define GLOBAL_ROUTER_INTERFACE_H
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    24
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    25
#include <stdint.h>
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    26
#include <list>
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    27
#include "ns3/object.h"
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    28
#include "ns3/ptr.h"
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    29
#include "ns3/node.h"
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    30
#include "ns3/channel.h"
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    31
#include "ns3/ipv4-address.h"
3939
206f627bd5af factor DiscoverLSAs into understandable modules
Craig Dowell <craigdo@ee.washington.edu>
parents: 3938
diff changeset
    32
#include "ns3/net-device-container.h"
1113
5b63b39161e7 remove routing environment, move router interface creation to global-route-manager
Craig Dowell <craigdo@ee.washington.edu>
parents: 1112
diff changeset
    33
#include "ns3/global-route-manager.h"
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    34
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    35
namespace ns3 {
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
 * @brief A single link record for a link state advertisement.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    39
 *
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
    40
 * The GlobalRoutingLinkRecord is modeled after the OSPF link record field of
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    41
 * a Link State Advertisement.  Right now we will only see two types of link
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    42
 * records corresponding to a stub network and a point-to-point link (channel).
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    43
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
    44
class GlobalRoutingLinkRecord
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    45
{
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    46
public:
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
 * @enum LinkType
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
    49
 * @brief Enumeration of the possible types of Global Routing Link Records.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    50
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    51
 * These values are defined in the OSPF spec.  We currently only use 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    52
 * PointToPoint and StubNetwork types.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    53
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    54
  enum LinkType {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    55
    Unknown = 0,        /**< Uninitialized Link Record */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    56
    PointToPoint,       /**< Record representing a point to point channel */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    57
    TransitNetwork,     /**< Unused -- for future OSPF compatibility  */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    58
    StubNetwork,        /**< Record represents a leaf node network */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    59
    VirtualLink         /**< Unused -- for future OSPF compatibility  */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    60
  };
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
    61
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    62
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
    63
 * @brief Construct an empty ("uninitialized") Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    64
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    65
 * The Link ID and Link Data Ipv4 addresses are set to "0.0.0.0";
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    66
 * The Link Type is set to Unknown;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    67
 * The metric is set to 0.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    68
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
    69
  GlobalRoutingLinkRecord ();
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
    70
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    71
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
    72
 * Construct an initialized Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    73
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    74
 * @param linkType The type of link record to construct.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    75
 * @param linkId The link ID for the record.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    76
 * @param linkData The link data field for the record.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    77
 * @param metric The metric field for the record.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    78
 * @see LinkType
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    79
 * @see SetLinkId
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    80
 * @see SetLinkData
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    81
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
    82
  GlobalRoutingLinkRecord (
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    83
    LinkType    linkType, 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    84
    Ipv4Address linkId, 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    85
    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: 1457
diff changeset
    86
    uint16_t    metric);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
    87
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    88
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
    89
 * @brief Destroy a Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    90
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    91
 * Currently does nothing.  Here as a placeholder only.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    92
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
    93
  ~GlobalRoutingLinkRecord ();
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
    94
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    95
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
    96
 * Get the Link ID field of the Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    97
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    98
 * For an OSPF type 1 link (PointToPoint) the Link ID will be the Router ID
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
    99
 * of the neighboring router.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   100
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   101
 * For an OSPF type 3 link (StubNetwork), the Link ID will be the adjacent
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   102
 * neighbor's IP address
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
 * @returns The Ipv4Address corresponding to the Link ID field of the record.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   105
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   106
  Ipv4Address GetLinkId(void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   107
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   108
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   109
 * @brief Set the Link ID field of the Global Routing Link Record.
1111
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
 * For an OSPF type 1 link (PointToPoint) the Link ID must be the Router ID
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   112
 * of the neighboring router.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   113
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   114
 * For an OSPF type 3 link (StubNetwork), the Link ID must be the adjacent
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   115
 * neighbor's IP address
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   116
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   117
 * @param addr An Ipv4Address to store in the Link ID field of the record.
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 SetLinkId(Ipv4Address addr);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   120
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   121
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   122
 * @brief Get the Link Data field of the Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   123
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   124
 * For an OSPF type 1 link (PointToPoint) the Link Data will be the IP
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   125
 * address of the node of the local side of the link.
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
 * For an OSPF type 3 link (StubNetwork), the Link Data will be the
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   128
 * network mask
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
 * @returns The Ipv4Address corresponding to the Link Data field of the record.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   131
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   132
  Ipv4Address GetLinkData(void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   133
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   134
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   135
 * @brief Set the Link Data field of the Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   136
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   137
 * For an OSPF type 1 link (PointToPoint) the Link Data must be the IP
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   138
 * address of the node of the local side of the link.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   139
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   140
 * For an OSPF type 3 link (StubNetwork), the Link Data must be set to the
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   141
 * network mask
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   142
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   143
 * @param addr An Ipv4Address to store in the Link Data field of the record.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   144
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   145
  void SetLinkData(Ipv4Address addr);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   146
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   147
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   148
 * @brief Get the Link Type field of the Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   149
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   150
 * The Link Type describes the kind of link a given record represents.  The
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   151
 * values are defined by OSPF.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   152
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   153
 * @see LinkType
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   154
 * @returns The LinkType of the current Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   155
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   156
  LinkType GetLinkType(void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   157
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   158
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   159
 * @brief Set the Link Type field of the Global Routing Link Record.
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
 * The Link Type describes the kind of link a given record represents.  The
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   162
 * values are defined by OSPF.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   163
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   164
 * @see LinkType
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   165
 * @param linkType The new LinkType for the current Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   166
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   167
  void SetLinkType(LinkType linkType);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   168
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   169
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   170
 * @brief Get the Metric Data field of the Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   171
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   172
 * The metric is an abstract cost associated with forwarding a packet across
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   173
 * a link.  A sum of metrics must have a well-defined meaning.  That is, you
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   174
 * shouldn't use bandwidth as a metric (how does the sum of the bandwidth of
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   175
 * two hops relate to the cost of sending a packet); rather you should use
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   176
 * something like delay.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   177
 *
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   178
 * @returns The metric field of the Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   179
 */
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: 1457
diff changeset
   180
  uint16_t GetMetric(void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   181
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   182
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   183
 * @brief Set the Metric Data field of the Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   184
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   185
 * The metric is an abstract cost associated with forwarding a packet across
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   186
 * a link.  A sum of metrics must have a well-defined meaning.  That is, you
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   187
 * shouldn't use bandwidth as a metric (how does the sum of the bandwidth of
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   188
 * two hops relate to the cost of sending a packet); rather you should use
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   189
 * something like delay.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   190
 *
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   191
 * @param metric The new metric for the current Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   192
 */
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: 1457
diff changeset
   193
  void SetMetric(uint16_t metric);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   194
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   195
private:
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   196
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   197
 * m_linkId and m_linkData are defined by OSPF to have different meanings 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   198
 * depending on the type of link a given link records represents.  They work
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   199
 * together.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   200
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   201
 * For Type 1 link (PointToPoint), set m_linkId to Router ID of 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   202
 * neighboring router.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   203
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   204
 * For Type 3 link (Stub), set m_linkId to neighbor's IP address
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   205
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   206
  Ipv4Address m_linkId;         
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   207
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   208
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   209
 * m_linkId and m_linkData are defined by OSPF to have different meanings 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   210
 * depending on the type of link a given link records represents.  They work
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   211
 * together.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   212
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   213
 * For Type 1 link (PointToPoint), set m_linkData to local IP address  
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   214
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   215
 * For Type 3 link (Stub), set m_linkData to mask
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
  Ipv4Address m_linkData;    // for links to RouterLSA, 
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   218
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   219
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   220
 * The type of the Global Routing Link Record.  Defined in the OSPF spec.  
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   221
 * We currently only use PointToPoint and StubNetwork types.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   222
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   223
  LinkType m_linkType;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   224
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   225
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   226
 * The metric for a given link.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   227
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   228
 * A metric is abstract cost associated with forwarding a packet across a 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   229
 * link.  A sum of metrics must have a well-defined meaning.  That is, you 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   230
 * shouldn't use bandwidth as a metric (how does the sum of the bandwidth 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   231
 * of two hops relate to the cost of sending a packet); rather you should
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   232
 * use something like delay.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   233
 */
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: 1457
diff changeset
   234
  uint16_t m_metric;  
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   235
};
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
 * @brief a Link State Advertisement (LSA) for a router, used in global 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   239
 * routing.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   240
 * 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   241
 * Roughly equivalent to a global incarnation of the OSPF link state header
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   242
 * combined with a list of Link Records.  Since it's global, there's
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   243
 * no need for age or sequence number.  See RFC 2328, Appendix A.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   244
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   245
class GlobalRoutingLSA
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   246
{
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   247
public:
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   248
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   249
 * @enum LSType
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   250
 * @brief corresponds to LS type field of RFC 2328 OSPF LSA header
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   251
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   252
  enum LSType {
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   253
    Unknown = 0,        /**< Uninitialized Type */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   254
    RouterLSA,
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   255
    NetworkLSA,
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   256
    SummaryLSA,
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   257
    SummaryLSA_ASBR,
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   258
    ASExternalLSAs
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   259
  };
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   260
/**
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   261
 * @enum SPFStatus
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   262
 * @brief Enumeration of the possible values of the status flag in the Routing 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   263
 * Link State Advertisements.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   264
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   265
  enum SPFStatus {
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   266
    LSA_SPF_NOT_EXPLORED = 0,	/**< New vertex not yet considered */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   267
    LSA_SPF_CANDIDATE,		/**< Vertex is in the SPF candidate queue */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   268
    LSA_SPF_IN_SPFTREE		/**< Vertex is in the SPF tree */
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
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   271
 * @brief Create a blank Global Routing Link State Advertisement.  
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   272
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   273
 * On completion Ipv4Address variables initialized to 0.0.0.0 and the 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   274
 * list of Link State Records is empty.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   275
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   276
  GlobalRoutingLSA();
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   277
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   278
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   279
 * @brief Create an initialized Global Routing Link State Advertisement.  
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   280
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   281
 * On completion the list of Link State Records is empty.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   282
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   283
 * @param status The status to of the new LSA.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   284
 * @param linkStateId The Ipv4Address for the link state ID field.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   285
 * @param advertisingRtr The Ipv4Address for the advertising router field.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   286
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   287
  GlobalRoutingLSA(SPFStatus status, Ipv4Address linkStateId, 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   288
    Ipv4Address advertisingRtr);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   289
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   290
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   291
 * @brief Copy constructor for a Global Routing Link State Advertisement.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   292
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   293
 * Takes a piece of memory and constructs a semantically identical copy of
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   294
 * the given LSA.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   295
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   296
 * @param lsa The existing LSA to be used as the source.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   297
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   298
  GlobalRoutingLSA (GlobalRoutingLSA& lsa);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   299
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   300
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   301
 * @brief Destroy an existing Global Routing Link State Advertisement.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   302
 *
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   303
 * Any Global Routing Link Records present in the list are freed.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   304
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   305
  ~GlobalRoutingLSA();
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   306
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   307
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   308
 * @brief Assignment operator for a Global Routing Link State Advertisement.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   309
 *
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   310
 * Takes an existing Global Routing Link State Advertisement and overwrites
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   311
 * it to make a semantically identical copy of a given prototype LSA.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   312
 *
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   313
 * If there are any Global Routing Link Records present in the existing 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   314
 * LSA, they are freed before the assignment happens.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   315
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   316
 * @param lsa The existing LSA to be used as the source.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   317
 * @returns Reference to the overwritten LSA.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   318
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   319
  GlobalRoutingLSA& operator= (const GlobalRoutingLSA& lsa);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   320
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   321
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   322
 * @brief Copy any Global Routing Link Records in a given Global Routing Link
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   323
 * State Advertisement to the current LSA.  
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   324
 * 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   325
 * Existing Link Records are not deleted -- this is a concatenation of Link 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   326
 * Records.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   327
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   328
 * @see ClearLinkRecords ()
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   329
 * @param lsa The LSA to copy the Link Records from.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   330
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   331
  void CopyLinkRecords (const GlobalRoutingLSA& lsa);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   332
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   333
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   334
 * @brief Add a given Global Routing Link Record to the LSA.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   335
 *
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   336
 * @param lr The Global Routing Link Record to be added.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   337
 * @returns The number of link records in the list.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   338
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   339
  uint32_t AddLinkRecord (GlobalRoutingLinkRecord* lr);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   340
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   341
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   342
 * @brief Return the number of Global Routing Link Records in the LSA.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   343
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   344
 * @returns The number of link records in the list.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   345
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   346
  uint32_t GetNLinkRecords (void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   347
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   348
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   349
 * @brief Return a pointer to the specified Global Routing Link Record.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   350
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   351
 * @param n The LSA number desired.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   352
 * @returns The number of link records in the list.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   353
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   354
  GlobalRoutingLinkRecord* GetLinkRecord (uint32_t n) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   355
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   356
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   357
 * @brief Release all of the Global Routing Link Records present in the Global
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   358
 * Routing Link State Advertisement and make the list of link records empty.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   359
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   360
  void ClearLinkRecords(void);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   361
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   362
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   363
 * @brief Check to see if the list of Global Routing Link Records present in the
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   364
 * Global Routing Link State Advertisement is empty.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   365
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   366
 * @returns True if the list is empty, false otherwise.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   367
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   368
  bool IsEmpty(void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   369
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   370
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   371
 * @brief Print the contents of the Global Routing Link State Advertisement and
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   372
 * any Global Routing Link Records present in the list.  Quite verbose.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   373
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   374
  void Print (std::ostream &os) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   375
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   376
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   377
 * @brief Return the LSType field of the LSA 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   378
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   379
  LSType GetLSType (void) const;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   380
/**
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   381
 * @brief Set the LS type field of the LSA
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   382
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   383
  void SetLSType (LSType typ);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   384
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   385
/**
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   386
 * @brief Get the Link State ID as defined by the OSPF spec.  We always set it
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   387
 * to the router ID of the router making the advertisement.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   388
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   389
 * @see RoutingEnvironment::AllocateRouterId ()
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   390
 * @see GlobalRouting::GetRouterId ()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   391
 * @returns The Ipv4Address stored as the link state ID.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   392
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   393
  Ipv4Address GetLinkStateId (void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   394
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   395
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   396
 * @brief Set the Link State ID is defined by the OSPF spec.  We always set it
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   397
 * to the router ID of the router making the advertisement.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   398
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   399
 * @see RoutingEnvironment::AllocateRouterId ()
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   400
 * @see GlobalRouting::GetRouterId ()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   401
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   402
  void SetLinkStateId (Ipv4Address addr);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   403
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   404
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   405
 * @brief Get the Advertising Router as defined by the OSPF spec.  We always
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   406
 * set it to the router ID of the router making the advertisement.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   407
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   408
 * @see RoutingEnvironment::AllocateRouterId ()
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   409
 * @see GlobalRouting::GetRouterId ()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   410
 * @returns The Ipv4Address stored as the advetising router.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   411
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   412
  Ipv4Address GetAdvertisingRouter (void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   413
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   414
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   415
 * @brief Set the Advertising Router as defined by the OSPF spec.  We always
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   416
 * set it to the router ID of the router making the advertisement.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   417
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   418
 * @see RoutingEnvironment::AllocateRouterId ()
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   419
 * @see GlobalRouting::GetRouterId ()
1111
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
  void SetAdvertisingRouter (Ipv4Address  rtr);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   422
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   423
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   424
 * @brief For a Network LSA, set the Network Mask field that precedes
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   425
 * the list of attached routers.
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   426
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   427
  void SetNetworkLSANetworkMask (Ipv4Mask mask);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   428
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   429
/**
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   430
 * @brief For a Network LSA, get the Network Mask field that precedes
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   431
 * the list of attached routers.
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   432
 * 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   433
 * @returns the NetworkLSANetworkMask 
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   434
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   435
  Ipv4Mask GetNetworkLSANetworkMask (void) const;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   436
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   437
/**
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   438
 * @brief Add an attached router to the list in the NetworkLSA
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   439
 *
1280
8c51afddffcb Doxygen cleanup
Tom Henderson <tomh@tomh.org>
parents: 1278
diff changeset
   440
 * @param addr The Ipv4Address of the interface on the network link
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   441
 * @returns The number of addresses in the list.
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   442
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   443
  uint32_t AddAttachedRouter (Ipv4Address addr);
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   444
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   445
/**
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   446
 * @brief Return the number of attached routers listed in the NetworkLSA
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   447
 *
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   448
 * @returns The number of attached routers.
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   449
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   450
  uint32_t GetNAttachedRouters (void) const;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   451
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   452
/**
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   453
 * @brief Return an Ipv4Address corresponding to the specified attached router
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   454
 *
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   455
 * @param n The attached router number desired (number in the list).
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   456
 * @returns The Ipv4Address of the requested router
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   457
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   458
  Ipv4Address GetAttachedRouter (uint32_t n) const;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   459
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   460
/**
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   461
 * @brief Get the SPF status of the advertisement.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   462
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   463
 * @see SPFStatus
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   464
 * @returns The SPFStatus of the LSA.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   465
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   466
  SPFStatus GetStatus (void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   467
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   468
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   469
 * @brief Set the SPF status of the advertisement
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   470
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   471
 * @see SPFStatus
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   472
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   473
  void SetStatus (SPFStatus status);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   474
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   475
private:
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   476
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   477
 * The type of the LSA.  Each LSA type has a separate advertisement
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   478
 * format.
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   479
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   480
  LSType m_lsType;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   481
/**
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   482
 * The Link State ID is defined by the OSPF spec.  We always set it to the
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   483
 * router ID of the router making the advertisement.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   484
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   485
 * @see RoutingEnvironment::AllocateRouterId ()
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   486
 * @see GlobalRouting::GetRouterId ()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   487
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   488
  Ipv4Address  m_linkStateId;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   489
1111
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
 * The Advertising Router is defined by the OSPF spec.  We always set it to 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   492
 * the router ID of the router making the advertisement.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   493
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   494
 * @see RoutingEnvironment::AllocateRouterId ()
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   495
 * @see GlobalRouting::GetRouterId ()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   496
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   497
  Ipv4Address  m_advertisingRtr;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   498
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   499
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   500
 * A convenience typedef to avoid too much writers cramp.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   501
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   502
  typedef std::list<GlobalRoutingLinkRecord*> ListOfLinkRecords_t;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   503
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   504
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   505
 * Each Link State Advertisement contains a number of Link Records that
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   506
 * describe the kinds of links that are attached to a given node.  We 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   507
 * consider PointToPoint and StubNetwork links.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   508
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   509
 * m_linkRecords is an STL list container to hold the Link Records that have
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   510
 * been discovered and prepared for the advertisement.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   511
 *
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   512
 * @see GlobalRouting::DiscoverLSAs ()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   513
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   514
  ListOfLinkRecords_t m_linkRecords;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   515
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   516
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   517
 * Each Network LSA contains the network mask of the attached network
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   518
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   519
  Ipv4Mask m_networkLSANetworkMask;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   520
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   521
/**
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   522
 * A convenience typedef to avoid too much writers cramp.
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   523
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   524
  typedef std::list<Ipv4Address> ListOfAttachedRouters_t;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   525
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   526
/**
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   527
 * Each Network LSA contains a list of attached routers
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   528
 *
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   529
 * m_attachedRouters is an STL list container to hold the addresses that have
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   530
 * been discovered and prepared for the advertisement.
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   531
 *
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   532
 * @see GlobalRouting::DiscoverLSAs ()
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   533
 */
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   534
  ListOfAttachedRouters_t m_attachedRouters;
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   535
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   536
/**
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   537
 * This is a tristate flag used internally in the SPF computation to mark
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   538
 * if an SPFVertex (a data structure representing a vertex in the SPF tree
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   539
 * -- a router) is new, is a candidate for a shortest path, or is in its
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   540
 * proper position in the tree.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   541
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   542
  SPFStatus m_status;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   543
};
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   544
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   545
std::ostream& operator<< (std::ostream& os, GlobalRoutingLSA& lsa);
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   546
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   547
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   548
 * @brief An interface aggregated to a node to provide global routing info
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   549
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   550
 * An interface aggregated to a node that provides global routing information
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   551
 * to a global route manager.  The presence of the interface indicates that
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   552
 * the node is a router.  The interface is the mechanism by which the router
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   553
 * advertises its connections to neighboring routers.  We're basically 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   554
 * allowing the route manager to query for link state advertisements.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   555
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   556
class GlobalRouter : public Object
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   557
{
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   558
public:
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   559
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   560
 * @brief The Interface ID of the Global Router interface.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   561
 *
2257
71a58e70c671 QueryInterface -> GetObject
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2251
diff changeset
   562
 * @see Object::GetObject ()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   563
 */
2251
04963d8cca51 iid (void) -> GetTypeId (void)
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2250
diff changeset
   564
  static TypeId GetTypeId (void);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   565
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   566
/**
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1776
diff changeset
   567
 * @brief Create a Global Router class 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   568
 */
1881
24285ca5e94f fix bug 113 on m_node parameter for GlobalRouter
Tom Henderson <tomh@tomh.org>
parents: 1776
diff changeset
   569
  GlobalRouter ();
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   570
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   571
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   572
 * @brief Get the Router ID associated with this Global Router.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   573
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   574
 * The Router IDs are allocated in the RoutingEnvironment -- one per Router, 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   575
 * starting at 0.0.0.1 and incrementing with each instantiation of a router.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   576
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   577
 * @see RoutingEnvironment::AllocateRouterId ()
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   578
 * @returns The Router ID associated with the Global Router.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   579
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   580
  Ipv4Address GetRouterId (void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   581
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   582
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   583
 * @brief Walk the connected channels, discover the adjacent routers and build
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   584
 * the associated number of Global Routing Link State Advertisements that 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   585
 * this router can export.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   586
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   587
 * This is a fairly expensive operation in that every time it is called
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   588
 * the current list of LSAs is built by walking connected point-to-point
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   589
 * channels and peeking into adjacent IPV4 stacks to get address information.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   590
 * This is done to allow for limited dymanics of the Global Routing 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   591
 * environment.  By that we mean that you can discover new link state 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   592
 * advertisements after a network topology change by calling DiscoverLSAs 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   593
 * and then by reading those advertisements.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   594
 *
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   595
 * @see GlobalRoutingLSA
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   596
 * @see GlobalRouter::GetLSA ()
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   597
 * @returns The number of Global Routing Link State Advertisements.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   598
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   599
  uint32_t DiscoverLSAs (void);
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   600
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   601
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   602
 * @brief Get the Number of Global Routing Link State Advertisements that this
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   603
 * router can export.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   604
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   605
 * To get meaningful information you must have previously called DiscoverLSAs.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   606
 * After you know how many LSAs are present in the router, you may call 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   607
 * GetLSA () to retrieve the actual advertisement.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   608
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   609
 * @see GlobalRouterLSA
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   610
 * @see GlobalRouting::DiscoverLSAs ()
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   611
 * @see GlobalRouting::GetLSA ()
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   612
 * @returns The number of Global Routing Link State Advertisements.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   613
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   614
  uint32_t GetNumLSAs (void) const;
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   615
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   616
/**
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   617
 * @brief Get a Global Routing Link State Advertisements that this router has 
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   618
 * said that it can export.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   619
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   620
 * This is a fairly inexpensive expensive operation in that the hard work
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   621
 * was done in GetNumLSAs.  We just copy the indicated Global Routing Link
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   622
 * State Advertisement into the requested GlobalRoutingLSA object.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   623
 *
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   624
 * You must call GlobalRouter::GetNumLSAs before calling this method in 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   625
 * order to discover the adjacent routers and build the advertisements.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   626
 * GetNumLSAs will return the number of LSAs this router advertises.  
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   627
 * The parameter n (requested LSA number) must be in the range 0 to 
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   628
 * GetNumLSAs() - 1.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   629
 *
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   630
 * @see GlobalRoutingLSA
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   631
 * @see GlobalRouting::GetNumLSAs ()
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   632
 * @param n The index number of the LSA you want to read.
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   633
 * @param lsa The GlobalRoutingLSA class to receive the LSA information.
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   634
 * @returns The number of Global Router Link State Advertisements.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   635
 */
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   636
  bool GetLSA (uint32_t n, GlobalRoutingLSA &lsa) const;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   637
1210
599a311daef6 fix opt warnings, let compiler do tail call optimization in csma nd, remove protected access from router iface
Craig Dowell <craigdo@ee.washington.edu>
parents: 1202
diff changeset
   638
private:
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   639
  virtual ~GlobalRouter ();
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   640
  void ClearLSAs (void);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   641
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   642
  Ptr<NetDevice> GetAdjacent(Ptr<NetDevice> nd, Ptr<Channel> ch) const;
3937
04f9377661b8 convince global routing not to crash in the presence of bridges
Craig Dowell <craigdo@ee.washington.edu>
parents: 2257
diff changeset
   643
  bool FindIfIndexForDevice(Ptr<Node> node, Ptr<NetDevice> nd, uint32_t &index) const;
3938
972310213d07 Admit possibility that not all nodes are routers.
Craig Dowell <craigdo@ee.washington.edu>
parents: 3937
diff changeset
   644
  Ipv4Address FindDesignatedRouterForLink (Ptr<NetDevice> ndLocal) const;
972310213d07 Admit possibility that not all nodes are routers.
Craig Dowell <craigdo@ee.washington.edu>
parents: 3937
diff changeset
   645
  bool AnotherRouterOnLink (Ptr<NetDevice> nd) const;
3939
206f627bd5af factor DiscoverLSAs into understandable modules
Craig Dowell <craigdo@ee.washington.edu>
parents: 3938
diff changeset
   646
  void ProcessBroadcastLink (Ptr<NetDevice> nd, GlobalRoutingLSA *pLSA, NetDeviceContainer &c);
206f627bd5af factor DiscoverLSAs into understandable modules
Craig Dowell <craigdo@ee.washington.edu>
parents: 3938
diff changeset
   647
  void ProcessPointToPointLink (Ptr<NetDevice> ndLocal, GlobalRoutingLSA *pLSA);
206f627bd5af factor DiscoverLSAs into understandable modules
Craig Dowell <craigdo@ee.washington.edu>
parents: 3938
diff changeset
   648
  void BuildNetworkLSAs (NetDeviceContainer c);
206f627bd5af factor DiscoverLSAs into understandable modules
Craig Dowell <craigdo@ee.washington.edu>
parents: 3938
diff changeset
   649
  bool IsNetDeviceBridged (Ptr<NetDevice> nd) const;
206f627bd5af factor DiscoverLSAs into understandable modules
Craig Dowell <craigdo@ee.washington.edu>
parents: 3938
diff changeset
   650
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   651
1278
41bf67d701a5 global routing csma patch
Tom Henderson <tomh@tomh.org>
parents: 1210
diff changeset
   652
  typedef std::list<GlobalRoutingLSA*> ListOfLSAs_t;
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   653
  ListOfLSAs_t m_LSAs;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   654
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   655
  Ipv4Address m_routerId;
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   656
1202
953cc2fadcef fix memory leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1121
diff changeset
   657
  // inherited from Object
953cc2fadcef fix memory leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1121
diff changeset
   658
  virtual void DoDispose (void);
1210
599a311daef6 fix opt warnings, let compiler do tail call optimization in csma nd, remove protected access from router iface
Craig Dowell <craigdo@ee.washington.edu>
parents: 1202
diff changeset
   659
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   660
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   661
 * @brief Global Router copy construction is disallowed.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   662
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   663
  GlobalRouter (GlobalRouter& sr);
1210
599a311daef6 fix opt warnings, let compiler do tail call optimization in csma nd, remove protected access from router iface
Craig Dowell <craigdo@ee.washington.edu>
parents: 1202
diff changeset
   664
1111
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   665
/**
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   666
 * @brief Global Router assignment operator is disallowed.
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   667
 */
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   668
  GlobalRouter& operator= (GlobalRouter& sr);
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   669
};
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   670
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   671
} // namespace ns3
835cd416a0a8 rename party
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff changeset
   672
1115
453f36d7bead small readability change
Craig Dowell <craigdo@ee.washington.edu>
parents: 1113
diff changeset
   673
#endif /* GLOBAL_ROUTER_INTERFACE_H */