bug 592: Ipv4RoutingProtocol::RouteOutput needs a packet pointer argument for reactive protocols
authorJosh Pelkey <joshpelkey@gmail.com>
Fri, 26 Jun 2009 09:55:36 +0200
changeset 4603 67a0a49c1db4
parent 4602 36adfa546b04
child 4604 98cb594222af
bug 592: Ipv4RoutingProtocol::RouteOutput needs a packet pointer argument for reactive protocols
src/internet-stack/arp-l3-protocol.cc
src/internet-stack/icmpv4-l4-protocol.cc
src/internet-stack/ipv4-l3-protocol.cc
src/internet-stack/ipv4-raw-socket-impl.cc
src/internet-stack/tcp-l4-protocol.cc
src/internet-stack/tcp-socket-impl.cc
src/internet-stack/udp-socket-impl.cc
src/node/ipv4-routing-protocol.h
src/routing/global-routing/ipv4-global-routing.cc
src/routing/global-routing/ipv4-global-routing.h
src/routing/list-routing/ipv4-list-routing.cc
src/routing/list-routing/ipv4-list-routing.h
src/routing/olsr/olsr-routing-protocol.cc
src/routing/olsr/olsr-routing-protocol.h
src/routing/static-routing/ipv4-static-routing.cc
src/routing/static-routing/ipv4-static-routing.h
--- a/src/internet-stack/arp-l3-protocol.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/internet-stack/arp-l3-protocol.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -318,7 +318,8 @@
   Ipv4Header header;
   header.SetDestination (to);
   Socket::SocketErrno errno_;
-  Ptr<Ipv4Route> route = ipv4->GetRoutingProtocol ()->RouteOutput (header, interface, errno_);
+  Ptr<Packet> packet = Create<Packet> ();
+  Ptr<Ipv4Route> route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, interface, errno_);
   NS_ASSERT (route != 0);
   NS_LOG_LOGIC ("ARP: sending request from node "<<m_node->GetId ()<<
             " || src: " << cache->GetDevice ()->GetAddress () <<
@@ -329,7 +330,6 @@
 		  route->GetSource (),
                   cache->GetDevice ()->GetBroadcast (),
                   to);
-  Ptr<Packet> packet = Create<Packet> ();
   packet->AddHeader (arp);
   cache->GetDevice ()->Send (packet, cache->GetDevice ()->GetBroadcast (), PROT_NUMBER);
 }
@@ -346,7 +346,8 @@
   Ipv4Header header;
   header.SetDestination (toIp);
   Socket::SocketErrno errno_;
-  Ptr<Ipv4Route> route = ipv4->GetRoutingProtocol ()->RouteOutput (header, interface, errno_);
+  Ptr<Packet> packet = Create<Packet> ();
+  Ptr<Ipv4Route> route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, interface, errno_);
   NS_ASSERT (route != 0);
   NS_LOG_LOGIC ("ARP: sending reply from node "<<m_node->GetId ()<<
             "|| src: " << cache->GetDevice ()->GetAddress () << 
@@ -354,7 +355,6 @@
             " || dst: " << toMac << " / " << toIp);
   arp.SetReply (cache->GetDevice ()->GetAddress (),
                 route->GetSource (), toMac, toIp);
-  Ptr<Packet> packet = Create<Packet> ();
   packet->AddHeader (arp);
   cache->GetDevice ()->Send (packet, toMac, PROT_NUMBER);
 }
--- a/src/internet-stack/icmpv4-l4-protocol.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/internet-stack/icmpv4-l4-protocol.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -84,7 +84,7 @@
   Socket::SocketErrno errno_;
   Ptr<Ipv4Route> route;
   uint32_t oif = 0; //specify non-zero if bound to a source address
-  route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
+  route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, oif, errno_);
   if (route != 0)
     {
       NS_LOG_LOGIC ("Route exists");
--- a/src/internet-stack/ipv4-l3-protocol.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/internet-stack/ipv4-l3-protocol.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -532,7 +532,7 @@
   Socket::SocketErrno errno_; 
   uint32_t oif = 0; // unused for now
   ipHeader = BuildHeader (source, destination, protocol, packet->GetSize (), ttl, mayFragment);
-  Ptr<Ipv4Route> newRoute = m_routingProtocol->RouteOutput (ipHeader, oif, errno_);
+  Ptr<Ipv4Route> newRoute = m_routingProtocol->RouteOutput (packet, ipHeader, oif, errno_);
   if (newRoute)
     {
       SendRealOut (newRoute, packet, ipHeader);
--- a/src/internet-stack/ipv4-raw-socket-impl.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/internet-stack/ipv4-raw-socket-impl.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -178,7 +178,7 @@
       Ptr<Ipv4Route> route;
       uint32_t oif = 0; //specify non-zero if bound to a source address
       // TBD-- we could cache the route and just check its validity
-      route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
+      route = ipv4->GetRoutingProtocol ()->RouteOutput (p, header, oif, errno_);
       if (route != 0)
         {
           NS_LOG_LOGIC ("Route exists");
--- a/src/internet-stack/tcp-l4-protocol.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/internet-stack/tcp-l4-protocol.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -547,7 +547,7 @@
       Socket::SocketErrno errno_;
       Ptr<Ipv4Route> route;
       uint32_t oif = 0; //specify non-zero if bound to a source address
-      route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
+      route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, oif, errno_);
       ipv4->Send (packet, saddr, daddr, PROT_NUMBER, route);
     }
 }
@@ -585,7 +585,7 @@
       Socket::SocketErrno errno_;
       Ptr<Ipv4Route> route;
       uint32_t oif = 0; //specify non-zero if bound to a source address
-      route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
+      route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, oif, errno_);
       ipv4->Send (packet, saddr, daddr, PROT_NUMBER, route);
     }
   else
--- a/src/internet-stack/tcp-socket-impl.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/internet-stack/tcp-socket-impl.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -354,7 +354,7 @@
       Ptr<Ipv4Route> route;
       uint32_t oif = 0; //specify non-zero if bound to a source address
       // XXX here, cache the route in the endpoint?
-      route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
+      route = ipv4->GetRoutingProtocol ()->RouteOutput (Ptr<Packet> (), header, oif, errno_);
       if (route != 0)
         {
           NS_LOG_LOGIC ("Route exists");
@@ -855,7 +855,7 @@
             Ptr<Ipv4Route> route;
             uint32_t oif = 0; //specify non-zero if bound to a source address
             header.SetDestination (m_remoteAddress);
-            route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
+            route = ipv4->GetRoutingProtocol ()->RouteOutput (Ptr<Packet> (), header, oif, errno_);
             if (route != 0)
               {
                 NS_LOG_LOGIC ("Route exists");
--- a/src/internet-stack/udp-socket-impl.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/internet-stack/udp-socket-impl.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -400,7 +400,7 @@
       Ptr<Ipv4Route> route;
       uint32_t oif = 0; //specify non-zero if bound to a source address
       // TBD-- we could cache the route and just check its validity
-      route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_); 
+      route = ipv4->GetRoutingProtocol ()->RouteOutput (p, header, oif, errno_); 
       if (route != 0)
         {
           NS_LOG_LOGIC ("Route exists");
--- a/src/node/ipv4-routing-protocol.h	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/node/ipv4-routing-protocol.h	Fri Jun 26 09:55:36 2009 +0200
@@ -60,6 +60,8 @@
    * packet to be forwarded, and is synchronous.  Can be used for
    * multicast or unicast.  The Linux equivalent is ip_route_output()
    *
+   * \param p packet to be routed.  Note that this method may modify the packet.
+   *          Callers may also pass in a null pointer. 
    * \param header input parameter (used to form key to search for the route)
    * \param oif Output interface index.  May be zero, or may be bound via
    *            socket options to a particular output interface.
@@ -67,7 +69,7 @@
    *
    * \returns a code that indicates what happened in the lookup
    */
-  virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
+  virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
   
   /**
    * \brief Route an input packet (to be forwarded or locally delivered)
--- a/src/routing/global-routing/ipv4-global-routing.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/routing/global-routing/ipv4-global-routing.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -259,7 +259,7 @@
 }
 
 Ptr<Ipv4Route>
-Ipv4GlobalRouting::RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
+Ipv4GlobalRouting::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
 {      
 
 //
--- a/src/routing/global-routing/ipv4-global-routing.h	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/routing/global-routing/ipv4-global-routing.h	Fri Jun 26 09:55:36 2009 +0200
@@ -80,7 +80,7 @@
   Ipv4GlobalRouting ();
   virtual ~Ipv4GlobalRouting ();
 
-  virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
+  virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
 
   virtual bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
                              UnicastForwardCallback ucb, MulticastForwardCallback mcb,
--- a/src/routing/list-routing/ipv4-list-routing.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/routing/list-routing/ipv4-list-routing.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -69,7 +69,7 @@
 }
 
 Ptr<Ipv4Route>
-Ipv4ListRouting::RouteOutput (const Ipv4Header &header, uint32_t oif, enum Socket::SocketErrno &sockerr)
+Ipv4ListRouting::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, enum Socket::SocketErrno &sockerr)
 {
   NS_LOG_FUNCTION (this << header.GetDestination () << " " << header.GetSource () << " " << oif);
   Ptr<Ipv4Route> route;
@@ -79,7 +79,7 @@
     {
       NS_LOG_LOGIC ("Checking protocol " << (*i).second->GetInstanceTypeId () << " with priority " << (*i).first);
       NS_LOG_LOGIC ("Requesting source address for destination " << header.GetDestination ());
-      route = (*i).second->RouteOutput (header, oif, sockerr);
+      route = (*i).second->RouteOutput (p, header, oif, sockerr);
       if (route)
         {
           NS_LOG_LOGIC ("Found route " << route);
@@ -335,7 +335,7 @@
 
 class Ipv4ARouting : public Ipv4RoutingProtocol {
 public:
-  Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)  { return 0;}
+  Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)  { return 0;}
   bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
                              UnicastForwardCallback ucb, MulticastForwardCallback mcb,
                              LocalDeliverCallback lcb, ErrorCallback ecb) {return false;}
@@ -348,7 +348,7 @@
 
 class Ipv4BRouting : public Ipv4RoutingProtocol {
 public:
-  Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)  { return 0;}
+  Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)  { return 0;}
   bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
                              UnicastForwardCallback ucb, MulticastForwardCallback mcb,
                              LocalDeliverCallback lcb, ErrorCallback ecb) {return false;}
--- a/src/routing/list-routing/ipv4-list-routing.h	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/routing/list-routing/ipv4-list-routing.h	Fri Jun 26 09:55:36 2009 +0200
@@ -73,7 +73,7 @@
   virtual Ptr<Ipv4RoutingProtocol> GetRoutingProtocol (uint32_t index, int16_t& priority) const;
 
   // Below are from Ipv4RoutingProtocol
-  virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
+  virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
 
   virtual bool RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
                            UnicastForwardCallback ucb, MulticastForwardCallback mcb,
--- a/src/routing/olsr/olsr-routing-protocol.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/routing/olsr/olsr-routing-protocol.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -2551,7 +2551,7 @@
 }
 
 Ptr<Ipv4Route>
-RoutingProtocol::RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
+RoutingProtocol::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
 {  
   NS_LOG_FUNCTION (this << " " << m_ipv4->GetObject<Node> ()->GetId() << " " << header.GetDestination () << " " << oif);
   // TBD:  oif is unused; can be used to restrict the outgoing interface
--- a/src/routing/olsr/olsr-routing-protocol.h	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/routing/olsr/olsr-routing-protocol.h	Fri Jun 26 09:55:36 2009 +0200
@@ -120,7 +120,7 @@
                       RoutingTableEntry &outEntry) const;
 
   // From Ipv4RoutingProtocol
-  virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
+  virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
    virtual bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
                              UnicastForwardCallback ucb, MulticastForwardCallback mcb,
                              LocalDeliverCallback lcb, ErrorCallback ecb);  
--- a/src/routing/static-routing/ipv4-static-routing.cc	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/routing/static-routing/ipv4-static-routing.cc	Fri Jun 26 09:55:36 2009 +0200
@@ -437,7 +437,7 @@
 }
 
 Ptr<Ipv4Route> 
-Ipv4StaticRouting::RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
+Ipv4StaticRouting::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
 {
   NS_LOG_FUNCTION (this << header << oif);
   Ipv4Address destination = header.GetDestination ();
--- a/src/routing/static-routing/ipv4-static-routing.h	Fri Jun 26 09:46:21 2009 +0200
+++ b/src/routing/static-routing/ipv4-static-routing.h	Fri Jun 26 09:55:36 2009 +0200
@@ -70,7 +70,7 @@
   Ipv4StaticRouting ();
   virtual ~Ipv4StaticRouting ();
 
-  virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
+  virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
 
   virtual bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
                              UnicastForwardCallback ucb, MulticastForwardCallback mcb,