src/internet/model/ipv4-list-routing.cc
author Pedro Silva <pmms@inesctec.pt>
Wed, 29 Oct 2014 10:12:53 -0700
changeset 11040 cd2eda848730
parent 10968 2d29fee2b7b8
child 11259 ea2f6a3ed14e
permissions -rw-r--r--
bug 1791: TCP Endpoint never deallocates when closing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7256
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     2
/*
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     3
 * Copyright (c) 2009 University of Washington
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     4
 *
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     8
 *
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    12
 * GNU General Public License for more details.
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    13
 *
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    17
 *
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    18
 */
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    19
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    20
#include "ns3/log.h"
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    21
#include "ns3/ipv4.h"
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    22
#include "ns3/ipv4-route.h"
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    23
#include "ns3/node.h"
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    24
#include "ns3/ipv4-static-routing.h"
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    25
#include "ipv4-list-routing.h"
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    26
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10652
diff changeset
    27
namespace ns3 {
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    28
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10652
diff changeset
    29
NS_LOG_COMPONENT_DEFINE ("Ipv4ListRouting");
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    30
10652
dc18deba4502 [doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10410
diff changeset
    31
NS_OBJECT_ENSURE_REGISTERED (Ipv4ListRouting);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    32
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    33
TypeId
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    34
Ipv4ListRouting::GetTypeId (void)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    35
{
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    36
  static TypeId tid = TypeId ("ns3::Ipv4ListRouting")
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    37
    .SetParent<Ipv4RoutingProtocol> ()
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    38
    .AddConstructor<Ipv4ListRouting> ()
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
    39
  ;
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    40
  return tid;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    41
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    42
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    43
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    44
Ipv4ListRouting::Ipv4ListRouting () 
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
    45
  : m_ipv4 (0)
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    46
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 9703
diff changeset
    47
  NS_LOG_FUNCTION (this);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    48
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    49
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    50
Ipv4ListRouting::~Ipv4ListRouting () 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    51
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 9703
diff changeset
    52
  NS_LOG_FUNCTION (this);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    53
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    54
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    55
void
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    56
Ipv4ListRouting::DoDispose (void)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    57
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 9703
diff changeset
    58
  NS_LOG_FUNCTION (this);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    59
  for (Ipv4RoutingProtocolList::iterator rprotoIter = m_routingProtocols.begin ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    60
       rprotoIter != m_routingProtocols.end (); rprotoIter++)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    61
    {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    62
      // Note:  Calling dispose on these protocols causes memory leak
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    63
      //        The routing protocols should not maintain a pointer to
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    64
      //        this object, so Dispose() shouldn't be necessary.
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    65
      (*rprotoIter).second = 0;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    66
    }
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    67
  m_routingProtocols.clear ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    68
  m_ipv4 = 0;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    69
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    70
5524
efed7493f2c1 Make applications generate traffic within their associated context/node
Guillaume Seguin <guillaume@segu.in>
parents: 5281
diff changeset
    71
void
6701
a590022a1536 [bug 947] Pretty-print IPv4 routing tables (patch originated by Hemanth Narra)
Tom Henderson <tomh@tomh.org>
parents: 6648
diff changeset
    72
Ipv4ListRouting::PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const
a590022a1536 [bug 947] Pretty-print IPv4 routing tables (patch originated by Hemanth Narra)
Tom Henderson <tomh@tomh.org>
parents: 6648
diff changeset
    73
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 9703
diff changeset
    74
  NS_LOG_FUNCTION (this << stream);
6701
a590022a1536 [bug 947] Pretty-print IPv4 routing tables (patch originated by Hemanth Narra)
Tom Henderson <tomh@tomh.org>
parents: 6648
diff changeset
    75
  *stream->GetStream () << "Node: " << m_ipv4->GetObject<Node> ()->GetId () 
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7176
diff changeset
    76
                        << " Time: " << Simulator::Now ().GetSeconds () << "s "
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
    77
                        << "Ipv4ListRouting table" << std::endl;
6701
a590022a1536 [bug 947] Pretty-print IPv4 routing tables (patch originated by Hemanth Narra)
Tom Henderson <tomh@tomh.org>
parents: 6648
diff changeset
    78
  for (Ipv4RoutingProtocolList::const_iterator i = m_routingProtocols.begin ();
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
    79
       i != m_routingProtocols.end (); i++)
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
    80
    {
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
    81
      *stream->GetStream () << "  Priority: " << (*i).first << " Protocol: " << (*i).second->GetInstanceTypeId () << std::endl;
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
    82
      (*i).second->PrintRoutingTable (stream);
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
    83
    }
6701
a590022a1536 [bug 947] Pretty-print IPv4 routing tables (patch originated by Hemanth Narra)
Tom Henderson <tomh@tomh.org>
parents: 6648
diff changeset
    84
  *stream->GetStream () << std::endl;
a590022a1536 [bug 947] Pretty-print IPv4 routing tables (patch originated by Hemanth Narra)
Tom Henderson <tomh@tomh.org>
parents: 6648
diff changeset
    85
}
a590022a1536 [bug 947] Pretty-print IPv4 routing tables (patch originated by Hemanth Narra)
Tom Henderson <tomh@tomh.org>
parents: 6648
diff changeset
    86
a590022a1536 [bug 947] Pretty-print IPv4 routing tables (patch originated by Hemanth Narra)
Tom Henderson <tomh@tomh.org>
parents: 6648
diff changeset
    87
void
9703
681f35b212ff Rename Start and DoStart methods to Initialize and DoInitialize
Vedran Miletić <rivanvx@gmail.com>
parents: 7385
diff changeset
    88
Ipv4ListRouting::DoInitialize (void)
5524
efed7493f2c1 Make applications generate traffic within their associated context/node
Guillaume Seguin <guillaume@segu.in>
parents: 5281
diff changeset
    89
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 9703
diff changeset
    90
  NS_LOG_FUNCTION (this);
5524
efed7493f2c1 Make applications generate traffic within their associated context/node
Guillaume Seguin <guillaume@segu.in>
parents: 5281
diff changeset
    91
  for (Ipv4RoutingProtocolList::iterator rprotoIter = m_routingProtocols.begin ();
efed7493f2c1 Make applications generate traffic within their associated context/node
Guillaume Seguin <guillaume@segu.in>
parents: 5281
diff changeset
    92
       rprotoIter != m_routingProtocols.end (); rprotoIter++)
efed7493f2c1 Make applications generate traffic within their associated context/node
Guillaume Seguin <guillaume@segu.in>
parents: 5281
diff changeset
    93
    {
efed7493f2c1 Make applications generate traffic within their associated context/node
Guillaume Seguin <guillaume@segu.in>
parents: 5281
diff changeset
    94
      Ptr<Ipv4RoutingProtocol> protocol = (*rprotoIter).second;
9703
681f35b212ff Rename Start and DoStart methods to Initialize and DoInitialize
Vedran Miletić <rivanvx@gmail.com>
parents: 7385
diff changeset
    95
      protocol->Initialize ();
5524
efed7493f2c1 Make applications generate traffic within their associated context/node
Guillaume Seguin <guillaume@segu.in>
parents: 5281
diff changeset
    96
    }
9703
681f35b212ff Rename Start and DoStart methods to Initialize and DoInitialize
Vedran Miletić <rivanvx@gmail.com>
parents: 7385
diff changeset
    97
  Ipv4RoutingProtocol::DoInitialize ();
5524
efed7493f2c1 Make applications generate traffic within their associated context/node
Guillaume Seguin <guillaume@segu.in>
parents: 5281
diff changeset
    98
}
efed7493f2c1 Make applications generate traffic within their associated context/node
Guillaume Seguin <guillaume@segu.in>
parents: 5281
diff changeset
    99
efed7493f2c1 Make applications generate traffic within their associated context/node
Guillaume Seguin <guillaume@segu.in>
parents: 5281
diff changeset
   100
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   101
Ptr<Ipv4Route>
5856
7fd20c798a7d bug 742: Implementation of SO_BINDTODEVICE
Antti Mäkelä <zarhan@cc.hut.fi>
parents: 5760
diff changeset
   102
Ipv4ListRouting::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, Ptr<NetDevice> oif, enum Socket::SocketErrno &sockerr)
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   103
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 9703
diff changeset
   104
  NS_LOG_FUNCTION (this << p << header.GetDestination () << header.GetSource () << oif << sockerr);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   105
  Ptr<Ipv4Route> route;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   106
4570
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   107
  for (Ipv4RoutingProtocolList::const_iterator i = m_routingProtocols.begin ();
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   108
       i != m_routingProtocols.end (); i++)
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   109
    {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   110
      NS_LOG_LOGIC ("Checking protocol " << (*i).second->GetInstanceTypeId () << " with priority " << (*i).first);
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   111
      NS_LOG_LOGIC ("Requesting source address for destination " << header.GetDestination ());
4603
67a0a49c1db4 bug 592: Ipv4RoutingProtocol::RouteOutput needs a packet pointer argument for reactive protocols
Josh Pelkey <joshpelkey@gmail.com>
parents: 4573
diff changeset
   112
      route = (*i).second->RouteOutput (p, header, oif, sockerr);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   113
      if (route)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   114
        {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   115
          NS_LOG_LOGIC ("Found route " << route);
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   116
          sockerr = Socket::ERROR_NOTERROR;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   117
          return route;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   118
        }
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   119
    }
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   120
  NS_LOG_LOGIC ("Done checking " << GetTypeId ());
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   121
  NS_LOG_LOGIC ("");
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   122
  sockerr = Socket::ERROR_NOROUTETOHOST;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   123
  return 0;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   124
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   125
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   126
// Patterned after Linux ip_route_input and ip_route_input_slow
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   127
bool 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   128
Ipv4ListRouting::RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev, 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   129
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb, 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   130
                             LocalDeliverCallback lcb, ErrorCallback ecb)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   131
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 9703
diff changeset
   132
  NS_LOG_FUNCTION (this << p << header << idev << &ucb << &mcb << &lcb << &ecb);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   133
  bool retVal = false;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   134
  NS_LOG_LOGIC ("RouteInput logic for node: " << m_ipv4->GetObject<Node> ()->GetId ());
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   135
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   136
  NS_ASSERT (m_ipv4 != 0);
4607
0e15594f67f3 bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents: 4603
diff changeset
   137
  // Check if input device supports IP 
0e15594f67f3 bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents: 4603
diff changeset
   138
  NS_ASSERT (m_ipv4->GetInterfaceForDevice (idev) >= 0);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   139
  uint32_t iif = m_ipv4->GetInterfaceForDevice (idev); 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   140
5760
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   141
  retVal = m_ipv4->IsDestinationAddress (header.GetDestination (), iif);
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   142
  if (retVal == true)
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   143
    {
5760
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   144
      NS_LOG_LOGIC ("Address "<< header.GetDestination () << " is a match for local delivery");
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   145
      if (header.GetDestination ().IsMulticast ())
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   146
        {
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7176
diff changeset
   147
          Ptr<Packet> packetCopy = p->Copy ();
5760
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   148
          lcb (packetCopy, header, iif);
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   149
          retVal = true;
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   150
          // Fall through
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   151
        }
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   152
      else
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   153
        {
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   154
          lcb (p, header, iif);
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   155
          return true;
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   156
        }
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   157
    }
4607
0e15594f67f3 bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents: 4603
diff changeset
   158
  // Check if input device supports IP forwarding
0e15594f67f3 bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents: 4603
diff changeset
   159
  if (m_ipv4->IsForwarding (iif) == false)
0e15594f67f3 bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents: 4603
diff changeset
   160
    {
0e15594f67f3 bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents: 4603
diff changeset
   161
      NS_LOG_LOGIC ("Forwarding disabled for this interface");
0e15594f67f3 bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents: 4603
diff changeset
   162
      ecb (p, header, Socket::ERROR_NOROUTETOHOST);
0e15594f67f3 bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents: 4603
diff changeset
   163
      return false;
0e15594f67f3 bug 63: allow enabling or disabling ip forwarding on a per-interface basis
Tom Henderson <tomh@tomh.org>
parents: 4603
diff changeset
   164
    }
4562
8539f55c6b55 Fix bug 587 for ListRoutingProtocol bug; add unit test
Tom Henderson <tomh@tomh.org>
parents: 4561
diff changeset
   165
  // Next, try to find a route
5760
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   166
  // If we have already delivered a packet locally (e.g. multicast)
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   167
  // we suppress further downstream local delivery by nulling the callback
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   168
  LocalDeliverCallback downstreamLcb = lcb;
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   169
  if (retVal == true)
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   170
    {
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   171
      downstreamLcb = MakeNullCallback<void, Ptr<const Packet>, const Ipv4Header &, uint32_t > ();
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   172
    }
4570
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   173
  for (Ipv4RoutingProtocolList::const_iterator rprotoIter =
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   174
         m_routingProtocols.begin ();
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   175
       rprotoIter != m_routingProtocols.end ();
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   176
       rprotoIter++)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   177
    {
5760
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   178
      if ((*rprotoIter).second->RouteInput (p, header, idev, ucb, mcb, downstreamLcb, ecb))
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   179
        {
5760
4f08a0837018 Add new method for determining whether Ipv4 dest address is mine; add attribute to control RFC1122 behavior
Tom Henderson <tomh@tomh.org>
parents: 5524
diff changeset
   180
          NS_LOG_LOGIC ("Route found to forward packet in protocol " << (*rprotoIter).second->GetInstanceTypeId ().GetName ()); 
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   181
          return true;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   182
        }
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   183
    }
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
   184
  // No routing protocol has found a route.
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   185
  return retVal;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   186
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   187
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   188
void 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   189
Ipv4ListRouting::NotifyInterfaceUp (uint32_t interface)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   190
{
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   191
  NS_LOG_FUNCTION (this << interface);
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   192
  for (Ipv4RoutingProtocolList::const_iterator rprotoIter =
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   193
         m_routingProtocols.begin ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   194
       rprotoIter != m_routingProtocols.end ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   195
       rprotoIter++)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   196
    {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   197
      (*rprotoIter).second->NotifyInterfaceUp (interface);
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
   198
    }
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   199
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   200
void 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   201
Ipv4ListRouting::NotifyInterfaceDown (uint32_t interface)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   202
{
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   203
  NS_LOG_FUNCTION (this << interface);
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   204
  for (Ipv4RoutingProtocolList::const_iterator rprotoIter =
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   205
         m_routingProtocols.begin ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   206
       rprotoIter != m_routingProtocols.end ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   207
       rprotoIter++)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   208
    {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   209
      (*rprotoIter).second->NotifyInterfaceDown (interface);
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
   210
    }
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   211
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   212
void 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   213
Ipv4ListRouting::NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   214
{
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7176
diff changeset
   215
  NS_LOG_FUNCTION (this << interface << address);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   216
  for (Ipv4RoutingProtocolList::const_iterator rprotoIter =
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   217
         m_routingProtocols.begin ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   218
       rprotoIter != m_routingProtocols.end ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   219
       rprotoIter++)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   220
    {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   221
      (*rprotoIter).second->NotifyAddAddress (interface, address);
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
   222
    }
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   223
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   224
void 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   225
Ipv4ListRouting::NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   226
{
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7176
diff changeset
   227
  NS_LOG_FUNCTION (this << interface << address);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   228
  for (Ipv4RoutingProtocolList::const_iterator rprotoIter =
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   229
         m_routingProtocols.begin ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   230
       rprotoIter != m_routingProtocols.end ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   231
       rprotoIter++)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   232
    {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   233
      (*rprotoIter).second->NotifyRemoveAddress (interface, address);
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
   234
    }
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   235
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   236
void 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   237
Ipv4ListRouting::SetIpv4 (Ptr<Ipv4> ipv4)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   238
{
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7176
diff changeset
   239
  NS_LOG_FUNCTION (this << ipv4);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   240
  NS_ASSERT (m_ipv4 == 0);
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   241
  for (Ipv4RoutingProtocolList::const_iterator rprotoIter =
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   242
         m_routingProtocols.begin ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   243
       rprotoIter != m_routingProtocols.end ();
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   244
       rprotoIter++)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   245
    {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   246
      (*rprotoIter).second->SetIpv4 (ipv4);
7176
9f2663992e99 internet coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6967
diff changeset
   247
    }
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   248
  m_ipv4 = ipv4;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   249
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   250
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   251
void
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   252
Ipv4ListRouting::AddRoutingProtocol (Ptr<Ipv4RoutingProtocol> routingProtocol, int16_t priority)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   253
{
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   254
  NS_LOG_FUNCTION (this << routingProtocol->GetInstanceTypeId () << priority);
4562
8539f55c6b55 Fix bug 587 for ListRoutingProtocol bug; add unit test
Tom Henderson <tomh@tomh.org>
parents: 4561
diff changeset
   255
  m_routingProtocols.push_back (std::make_pair (priority, routingProtocol));
4570
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   256
  m_routingProtocols.sort ( Compare );
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   257
  if (m_ipv4 != 0)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   258
    {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   259
      routingProtocol->SetIpv4 (m_ipv4);
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   260
    }
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   261
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   262
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   263
uint32_t 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   264
Ipv4ListRouting::GetNRoutingProtocols (void) const
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   265
{
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   266
  NS_LOG_FUNCTION (this);
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   267
  return m_routingProtocols.size (); 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   268
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   269
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   270
Ptr<Ipv4RoutingProtocol> 
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   271
Ipv4ListRouting::GetRoutingProtocol (uint32_t index, int16_t& priority) const
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   272
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 9703
diff changeset
   273
  NS_LOG_FUNCTION (this << index << priority);
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   274
  if (index > m_routingProtocols.size ())
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   275
    {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   276
      NS_FATAL_ERROR ("Ipv4ListRouting::GetRoutingProtocol():  index " << index << " out of range");
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   277
    }
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   278
  uint32_t i = 0;
4570
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   279
  for (Ipv4RoutingProtocolList::const_iterator rprotoIter = m_routingProtocols.begin ();
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   280
       rprotoIter != m_routingProtocols.end (); rprotoIter++, i++)
4561
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   281
    {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   282
      if (i == index)
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   283
        {
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   284
          priority = (*rprotoIter).first;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   285
          return (*rprotoIter).second;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   286
        }
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   287
    }
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   288
  return 0;
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   289
}
cf6e27dd3a08 Move Ipv4ListRouting to src/internet-stack; get rid of Impl class
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   290
4570
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   291
bool 
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   292
Ipv4ListRouting::Compare (const Ipv4RoutingProtocolEntry& a, const Ipv4RoutingProtocolEntry& b)
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   293
{
9710
df21b904fce3 Further work on cleaning up function logging of internet module.
Kristijan Lenković <k.lenkovic@me.com>
parents: 9703
diff changeset
   294
  NS_LOG_FUNCTION_NOARGS ();
4570
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   295
  return a.first > b.first;
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   296
}
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   297
5c6e1f086a36 avoid using non-portable reverse iterator methods
Tom Henderson <tomh@tomh.org>
parents: 4562
diff changeset
   298
4562
8539f55c6b55 Fix bug 587 for ListRoutingProtocol bug; add unit test
Tom Henderson <tomh@tomh.org>
parents: 4561
diff changeset
   299
} // namespace ns3
8539f55c6b55 Fix bug 587 for ListRoutingProtocol bug; add unit test
Tom Henderson <tomh@tomh.org>
parents: 4561
diff changeset
   300