View | Details | Raw Unified | Return to bug 592
Collapse All | Expand All

(-)a/bindings/python/ns3_module_list_routing.py (-2 / +2 lines)
 Lines 85-94   def register_Ns3Ipv4ListRouting_methods( Link Here 
85
                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
85
                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
86
                   [param('uint32_t', 'index'), param('int16_t &', 'priority')], 
86
                   [param('uint32_t', 'index'), param('int16_t &', 'priority')], 
87
                   is_const=True, is_virtual=True)
87
                   is_const=True, is_virtual=True)
88
    ## ipv4-list-routing.h: ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRouting::RouteOutput(ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
88
    ## ipv4-list-routing.h: ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
89
    cls.add_method('RouteOutput', 
89
    cls.add_method('RouteOutput', 
90
                   'ns3::Ptr< ns3::Ipv4Route >', 
90
                   'ns3::Ptr< ns3::Ipv4Route >', 
91
                   [param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
91
                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
92
                   is_virtual=True)
92
                   is_virtual=True)
93
    ## ipv4-list-routing.h: bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
93
    ## ipv4-list-routing.h: bool ns3::Ipv4ListRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
94
    cls.add_method('RouteInput', 
94
    cls.add_method('RouteInput', 
(-)a/bindings/python/ns3_module_node.py (-2 / +2 lines)
 Lines 2725-2734   def register_Ns3Ipv4RoutingProtocol_meth Link Here 
2725
                   'ns3::TypeId', 
2725
                   'ns3::TypeId', 
2726
                   [], 
2726
                   [], 
2727
                   is_static=True)
2727
                   is_static=True)
2728
    ## ipv4-routing-protocol.h: ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4RoutingProtocol::RouteOutput(ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
2728
    ## ipv4-routing-protocol.h: ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4RoutingProtocol::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
2729
    cls.add_method('RouteOutput', 
2729
    cls.add_method('RouteOutput', 
2730
                   'ns3::Ptr< ns3::Ipv4Route >', 
2730
                   'ns3::Ptr< ns3::Ipv4Route >', 
2731
                   [param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
2731
                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
2732
                   is_pure_virtual=True, is_virtual=True)
2732
                   is_pure_virtual=True, is_virtual=True)
2733
    ## ipv4-routing-protocol.h: bool ns3::Ipv4RoutingProtocol::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
2733
    ## ipv4-routing-protocol.h: bool ns3::Ipv4RoutingProtocol::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
2734
    cls.add_method('RouteInput', 
2734
    cls.add_method('RouteInput', 
(-)a/bindings/python/ns3_module_olsr.py (-2 / +2 lines)
 Lines 755-764   def register_Ns3OlsrRoutingProtocol_meth Link Here 
755
    cls.add_method('SetMainInterface', 
755
    cls.add_method('SetMainInterface', 
756
                   'void', 
756
                   'void', 
757
                   [param('uint32_t', 'interface')])
757
                   [param('uint32_t', 'interface')])
758
    ## olsr-routing-protocol.h: ns3::Ptr<ns3::Ipv4Route> ns3::olsr::RoutingProtocol::RouteOutput(ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
758
    ## olsr-routing-protocol.h: ns3::Ptr<ns3::Ipv4Route> ns3::olsr::RoutingProtocol::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
759
    cls.add_method('RouteOutput', 
759
    cls.add_method('RouteOutput', 
760
                   'ns3::Ptr< ns3::Ipv4Route >', 
760
                   'ns3::Ptr< ns3::Ipv4Route >', 
761
                   [param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
761
                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
762
                   visibility='private', is_virtual=True)
762
                   visibility='private', is_virtual=True)
763
    ## olsr-routing-protocol.h: bool ns3::olsr::RoutingProtocol::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
763
    ## olsr-routing-protocol.h: bool ns3::olsr::RoutingProtocol::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
764
    cls.add_method('RouteInput', 
764
    cls.add_method('RouteInput', 
(-)a/bindings/python/ns3_module_static_routing.py (-2 / +2 lines)
 Lines 201-210   def register_Ns3Ipv4StaticRouting_method Link Here 
201
                   is_static=True)
201
                   is_static=True)
202
    ## ipv4-static-routing.h: ns3::Ipv4StaticRouting::Ipv4StaticRouting() [constructor]
202
    ## ipv4-static-routing.h: ns3::Ipv4StaticRouting::Ipv4StaticRouting() [constructor]
203
    cls.add_constructor([])
203
    cls.add_constructor([])
204
    ## ipv4-static-routing.h: ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4StaticRouting::RouteOutput(ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
204
    ## ipv4-static-routing.h: ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4StaticRouting::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
205
    cls.add_method('RouteOutput', 
205
    cls.add_method('RouteOutput', 
206
                   'ns3::Ptr< ns3::Ipv4Route >', 
206
                   'ns3::Ptr< ns3::Ipv4Route >', 
207
                   [param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
207
                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
208
                   is_virtual=True)
208
                   is_virtual=True)
209
    ## ipv4-static-routing.h: bool ns3::Ipv4StaticRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
209
    ## ipv4-static-routing.h: bool ns3::Ipv4StaticRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::Socket::SocketErrno,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
210
    cls.add_method('RouteInput', 
210
    cls.add_method('RouteInput', 
(-)a/src/internet-stack/arp-l3-protocol.cc (-4 / +4 lines)
 Lines 318-324   ArpL3Protocol::SendArpRequest (Ptr<const Link Here 
318
  Ipv4Header header;
318
  Ipv4Header header;
319
  header.SetDestination (to);
319
  header.SetDestination (to);
320
  Socket::SocketErrno errno_;
320
  Socket::SocketErrno errno_;
321
  Ptr<Ipv4Route> route = ipv4->GetRoutingProtocol ()->RouteOutput (header, interface, errno_);
321
  Ptr<Packet> packet = Create<Packet> ();
322
  Ptr<Ipv4Route> route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, interface, errno_);
322
  NS_ASSERT (route != 0);
323
  NS_ASSERT (route != 0);
323
  NS_LOG_LOGIC ("ARP: sending request from node "<<m_node->GetId ()<<
324
  NS_LOG_LOGIC ("ARP: sending request from node "<<m_node->GetId ()<<
324
            " || src: " << cache->GetDevice ()->GetAddress () <<
325
            " || src: " << cache->GetDevice ()->GetAddress () <<
 Lines 329-335   ArpL3Protocol::SendArpRequest (Ptr<const Link Here 
329
		  route->GetSource (),
330
		  route->GetSource (),
330
                  cache->GetDevice ()->GetBroadcast (),
331
                  cache->GetDevice ()->GetBroadcast (),
331
                  to);
332
                  to);
332
  Ptr<Packet> packet = Create<Packet> ();
333
  packet->AddHeader (arp);
333
  packet->AddHeader (arp);
334
  cache->GetDevice ()->Send (packet, cache->GetDevice ()->GetBroadcast (), PROT_NUMBER);
334
  cache->GetDevice ()->Send (packet, cache->GetDevice ()->GetBroadcast (), PROT_NUMBER);
335
}
335
}
 Lines 346-352   ArpL3Protocol::SendArpReply (Ptr<const A Link Here 
346
  Ipv4Header header;
346
  Ipv4Header header;
347
  header.SetDestination (toIp);
347
  header.SetDestination (toIp);
348
  Socket::SocketErrno errno_;
348
  Socket::SocketErrno errno_;
349
  Ptr<Ipv4Route> route = ipv4->GetRoutingProtocol ()->RouteOutput (header, interface, errno_);
349
  Ptr<Packet> packet = Create<Packet> ();
350
  Ptr<Ipv4Route> route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, interface, errno_);
350
  NS_ASSERT (route != 0);
351
  NS_ASSERT (route != 0);
351
  NS_LOG_LOGIC ("ARP: sending reply from node "<<m_node->GetId ()<<
352
  NS_LOG_LOGIC ("ARP: sending reply from node "<<m_node->GetId ()<<
352
            "|| src: " << cache->GetDevice ()->GetAddress () << 
353
            "|| src: " << cache->GetDevice ()->GetAddress () << 
 Lines 354-360   ArpL3Protocol::SendArpReply (Ptr<const A Link Here 
354
            " || dst: " << toMac << " / " << toIp);
355
            " || dst: " << toMac << " / " << toIp);
355
  arp.SetReply (cache->GetDevice ()->GetAddress (),
356
  arp.SetReply (cache->GetDevice ()->GetAddress (),
356
                route->GetSource (), toMac, toIp);
357
                route->GetSource (), toMac, toIp);
357
  Ptr<Packet> packet = Create<Packet> ();
358
  packet->AddHeader (arp);
358
  packet->AddHeader (arp);
359
  cache->GetDevice ()->Send (packet, toMac, PROT_NUMBER);
359
  cache->GetDevice ()->Send (packet, toMac, PROT_NUMBER);
360
}
360
}
(-)a/src/internet-stack/icmpv4-l4-protocol.cc (-1 / +1 lines)
 Lines 84-90   Icmpv4L4Protocol::SendMessage (Ptr<Packe Link Here 
84
  Socket::SocketErrno errno_;
84
  Socket::SocketErrno errno_;
85
  Ptr<Ipv4Route> route;
85
  Ptr<Ipv4Route> route;
86
  uint32_t oif = 0; //specify non-zero if bound to a source address
86
  uint32_t oif = 0; //specify non-zero if bound to a source address
87
  route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
87
  route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, oif, errno_);
88
  if (route != 0)
88
  if (route != 0)
89
    {
89
    {
90
      NS_LOG_LOGIC ("Route exists");
90
      NS_LOG_LOGIC ("Route exists");
(-)a/src/internet-stack/ipv4-l3-protocol.cc (-1 / +1 lines)
 Lines 533-539   Ipv4L3Protocol::Send (Ptr<Packet> packet Link Here 
533
  Socket::SocketErrno errno_; 
533
  Socket::SocketErrno errno_; 
534
  uint32_t oif = 0; // unused for now
534
  uint32_t oif = 0; // unused for now
535
  ipHeader = BuildHeader (source, destination, protocol, packet->GetSize (), ttl, mayFragment);
535
  ipHeader = BuildHeader (source, destination, protocol, packet->GetSize (), ttl, mayFragment);
536
  Ptr<Ipv4Route> newRoute = m_routingProtocol->RouteOutput (ipHeader, oif, errno_);
536
  Ptr<Ipv4Route> newRoute = m_routingProtocol->RouteOutput (packet, ipHeader, oif, errno_);
537
  if (newRoute)
537
  if (newRoute)
538
    {
538
    {
539
      SendRealOut (newRoute, packet, ipHeader);
539
      SendRealOut (newRoute, packet, ipHeader);
(-)a/src/internet-stack/ipv4-raw-socket-impl.cc (-1 / +1 lines)
 Lines 178-184   Ipv4RawSocketImpl::SendTo (Ptr<Packet> p Link Here 
178
      Ptr<Ipv4Route> route;
178
      Ptr<Ipv4Route> route;
179
      uint32_t oif = 0; //specify non-zero if bound to a source address
179
      uint32_t oif = 0; //specify non-zero if bound to a source address
180
      // TBD-- we could cache the route and just check its validity
180
      // TBD-- we could cache the route and just check its validity
181
      route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
181
      route = ipv4->GetRoutingProtocol ()->RouteOutput (p, header, oif, errno_);
182
      if (route != 0)
182
      if (route != 0)
183
        {
183
        {
184
          NS_LOG_LOGIC ("Route exists");
184
          NS_LOG_LOGIC ("Route exists");
(-)a/src/internet-stack/tcp-l4-protocol.cc (-2 / +2 lines)
 Lines 547-553   TcpL4Protocol::Send (Ptr<Packet> packet, Link Here 
547
      Socket::SocketErrno errno_;
547
      Socket::SocketErrno errno_;
548
      Ptr<Ipv4Route> route;
548
      Ptr<Ipv4Route> route;
549
      uint32_t oif = 0; //specify non-zero if bound to a source address
549
      uint32_t oif = 0; //specify non-zero if bound to a source address
550
      route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
550
      route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, oif, errno_);
551
      ipv4->Send (packet, saddr, daddr, PROT_NUMBER, route);
551
      ipv4->Send (packet, saddr, daddr, PROT_NUMBER, route);
552
    }
552
    }
553
}
553
}
 Lines 585-591   TcpL4Protocol::SendPacket (Ptr<Packet> p Link Here 
585
      Socket::SocketErrno errno_;
585
      Socket::SocketErrno errno_;
586
      Ptr<Ipv4Route> route;
586
      Ptr<Ipv4Route> route;
587
      uint32_t oif = 0; //specify non-zero if bound to a source address
587
      uint32_t oif = 0; //specify non-zero if bound to a source address
588
      route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
588
      route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, oif, errno_);
589
      ipv4->Send (packet, saddr, daddr, PROT_NUMBER, route);
589
      ipv4->Send (packet, saddr, daddr, PROT_NUMBER, route);
590
    }
590
    }
591
  else
591
  else
(-)a/src/internet-stack/tcp-socket-impl.cc (-2 / +2 lines)
 Lines 354-360   TcpSocketImpl::Connect (const Address & Link Here 
354
      Ptr<Ipv4Route> route;
354
      Ptr<Ipv4Route> route;
355
      uint32_t oif = 0; //specify non-zero if bound to a source address
355
      uint32_t oif = 0; //specify non-zero if bound to a source address
356
      // XXX here, cache the route in the endpoint?
356
      // XXX here, cache the route in the endpoint?
357
      route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
357
      route = ipv4->GetRoutingProtocol ()->RouteOutput (Ptr<Packet> (), header, oif, errno_);
358
      if (route != 0)
358
      if (route != 0)
359
        {
359
        {
360
          NS_LOG_LOGIC ("Route exists");
360
          NS_LOG_LOGIC ("Route exists");
 Lines 855-861   bool TcpSocketImpl::ProcessPacketAction Link Here 
855
            Ptr<Ipv4Route> route;
855
            Ptr<Ipv4Route> route;
856
            uint32_t oif = 0; //specify non-zero if bound to a source address
856
            uint32_t oif = 0; //specify non-zero if bound to a source address
857
            header.SetDestination (m_remoteAddress);
857
            header.SetDestination (m_remoteAddress);
858
            route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_);
858
            route = ipv4->GetRoutingProtocol ()->RouteOutput (Ptr<Packet> (), header, oif, errno_);
859
            if (route != 0)
859
            if (route != 0)
860
              {
860
              {
861
                NS_LOG_LOGIC ("Route exists");
861
                NS_LOG_LOGIC ("Route exists");
(-)a/src/internet-stack/udp-socket-impl.cc (-1 / +1 lines)
 Lines 400-406   UdpSocketImpl::DoSendTo (Ptr<Packet> p, Link Here 
400
      Ptr<Ipv4Route> route;
400
      Ptr<Ipv4Route> route;
401
      uint32_t oif = 0; //specify non-zero if bound to a source address
401
      uint32_t oif = 0; //specify non-zero if bound to a source address
402
      // TBD-- we could cache the route and just check its validity
402
      // TBD-- we could cache the route and just check its validity
403
      route = ipv4->GetRoutingProtocol ()->RouteOutput (header, oif, errno_); 
403
      route = ipv4->GetRoutingProtocol ()->RouteOutput (p, header, oif, errno_); 
404
      if (route != 0)
404
      if (route != 0)
405
        {
405
        {
406
          NS_LOG_LOGIC ("Route exists");
406
          NS_LOG_LOGIC ("Route exists");
(-)a/src/node/ipv4-routing-protocol.h (-1 / +3 lines)
 Lines 60-65   public: Link Here 
60
   * packet to be forwarded, and is synchronous.  Can be used for
60
   * packet to be forwarded, and is synchronous.  Can be used for
61
   * multicast or unicast.  The Linux equivalent is ip_route_output()
61
   * multicast or unicast.  The Linux equivalent is ip_route_output()
62
   *
62
   *
63
   * \param p packet to be routed.  Note that this method may modify the packet.
64
   *          Callers may also pass in a null pointer. 
63
   * \param header input parameter (used to form key to search for the route)
65
   * \param header input parameter (used to form key to search for the route)
64
   * \param oif Output interface index.  May be zero, or may be bound via
66
   * \param oif Output interface index.  May be zero, or may be bound via
65
   *            socket options to a particular output interface.
67
   *            socket options to a particular output interface.
 Lines 67-73   public: Link Here 
67
   *
69
   *
68
   * \returns a code that indicates what happened in the lookup
70
   * \returns a code that indicates what happened in the lookup
69
   */
71
   */
70
  virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
72
  virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr) = 0;
71
  
73
  
72
  /**
74
  /**
73
   * \brief Route an input packet (to be forwarded or locally delivered)
75
   * \brief Route an input packet (to be forwarded or locally delivered)
(-)a/src/routing/global-routing/ipv4-global-routing.cc (-1 / +1 lines)
 Lines 259-265   Ipv4GlobalRouting::DoDispose (void) Link Here 
259
}
259
}
260
260
261
Ptr<Ipv4Route>
261
Ptr<Ipv4Route>
262
Ipv4GlobalRouting::RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
262
Ipv4GlobalRouting::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
263
{      
263
{      
264
264
265
//
265
//
(-)a/src/routing/global-routing/ipv4-global-routing.h (-1 / +1 lines)
 Lines 80-86   public: Link Here 
80
  Ipv4GlobalRouting ();
80
  Ipv4GlobalRouting ();
81
  virtual ~Ipv4GlobalRouting ();
81
  virtual ~Ipv4GlobalRouting ();
82
82
83
  virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
83
  virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
84
84
85
  virtual bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
85
  virtual bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
86
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
86
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
(-)a/src/routing/list-routing/ipv4-list-routing.cc (-4 / +4 lines)
 Lines 69-75   Ipv4ListRouting::DoDispose (void) Link Here 
69
}
69
}
70
70
71
Ptr<Ipv4Route>
71
Ptr<Ipv4Route>
72
Ipv4ListRouting::RouteOutput (const Ipv4Header &header, uint32_t oif, enum Socket::SocketErrno &sockerr)
72
Ipv4ListRouting::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, enum Socket::SocketErrno &sockerr)
73
{
73
{
74
  NS_LOG_FUNCTION (this << header.GetDestination () << " " << header.GetSource () << " " << oif);
74
  NS_LOG_FUNCTION (this << header.GetDestination () << " " << header.GetSource () << " " << oif);
75
  Ptr<Ipv4Route> route;
75
  Ptr<Ipv4Route> route;
 Lines 79-85   Ipv4ListRouting::RouteOutput (const Ipv4 Link Here 
79
    {
79
    {
80
      NS_LOG_LOGIC ("Checking protocol " << (*i).second->GetInstanceTypeId () << " with priority " << (*i).first);
80
      NS_LOG_LOGIC ("Checking protocol " << (*i).second->GetInstanceTypeId () << " with priority " << (*i).first);
81
      NS_LOG_LOGIC ("Requesting source address for destination " << header.GetDestination ());
81
      NS_LOG_LOGIC ("Requesting source address for destination " << header.GetDestination ());
82
      route = (*i).second->RouteOutput (header, oif, sockerr);
82
      route = (*i).second->RouteOutput (p, header, oif, sockerr);
83
      if (route)
83
      if (route)
84
        {
84
        {
85
          NS_LOG_LOGIC ("Found route " << route);
85
          NS_LOG_LOGIC ("Found route " << route);
 Lines 344-350   namespace ns3 { Link Here 
344
344
345
class Ipv4ARouting : public Ipv4RoutingProtocol {
345
class Ipv4ARouting : public Ipv4RoutingProtocol {
346
public:
346
public:
347
  Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)  { return 0;}
347
  Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)  { return 0;}
348
  bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
348
  bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
349
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
349
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
350
                             LocalDeliverCallback lcb, ErrorCallback ecb) {return false;}
350
                             LocalDeliverCallback lcb, ErrorCallback ecb) {return false;}
 Lines 357-363   public: Link Here 
357
357
358
class Ipv4BRouting : public Ipv4RoutingProtocol {
358
class Ipv4BRouting : public Ipv4RoutingProtocol {
359
public:
359
public:
360
  Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)  { return 0;}
360
  Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)  { return 0;}
361
  bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
361
  bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
362
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
362
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
363
                             LocalDeliverCallback lcb, ErrorCallback ecb) {return false;}
363
                             LocalDeliverCallback lcb, ErrorCallback ecb) {return false;}
(-)a/src/routing/list-routing/ipv4-list-routing.h (-1 / +1 lines)
 Lines 73-79   public: Link Here 
73
  virtual Ptr<Ipv4RoutingProtocol> GetRoutingProtocol (uint32_t index, int16_t& priority) const;
73
  virtual Ptr<Ipv4RoutingProtocol> GetRoutingProtocol (uint32_t index, int16_t& priority) const;
74
74
75
  // Below are from Ipv4RoutingProtocol
75
  // Below are from Ipv4RoutingProtocol
76
  virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
76
  virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
77
77
78
  virtual bool RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
78
  virtual bool RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
79
                           UnicastForwardCallback ucb, MulticastForwardCallback mcb,
79
                           UnicastForwardCallback ucb, MulticastForwardCallback mcb,
(-)a/src/routing/olsr/olsr-routing-protocol.cc (-1 / +1 lines)
 Lines 2551-2557   RoutingProtocol::FindSendEntry (RoutingT Link Here 
2551
}
2551
}
2552
2552
2553
Ptr<Ipv4Route>
2553
Ptr<Ipv4Route>
2554
RoutingProtocol::RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
2554
RoutingProtocol::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
2555
{  
2555
{  
2556
  NS_LOG_FUNCTION (this << " " << m_ipv4->GetObject<Node> ()->GetId() << " " << header.GetDestination () << " " << oif);
2556
  NS_LOG_FUNCTION (this << " " << m_ipv4->GetObject<Node> ()->GetId() << " " << header.GetDestination () << " " << oif);
2557
  // TBD:  oif is unused; can be used to restrict the outgoing interface
2557
  // TBD:  oif is unused; can be used to restrict the outgoing interface
(-)a/src/routing/olsr/olsr-routing-protocol.h (-1 / +1 lines)
 Lines 120-126   private: Link Here 
120
                      RoutingTableEntry &outEntry) const;
120
                      RoutingTableEntry &outEntry) const;
121
121
122
  // From Ipv4RoutingProtocol
122
  // From Ipv4RoutingProtocol
123
  virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
123
  virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
124
   virtual bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
124
   virtual bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
125
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
125
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
126
                             LocalDeliverCallback lcb, ErrorCallback ecb);  
126
                             LocalDeliverCallback lcb, ErrorCallback ecb);  
(-)a/src/routing/static-routing/ipv4-static-routing.cc (-1 / +1 lines)
 Lines 437-443   Ipv4StaticRouting::RemoveRoute (uint32_t Link Here 
437
}
437
}
438
438
439
Ptr<Ipv4Route> 
439
Ptr<Ipv4Route> 
440
Ipv4StaticRouting::RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
440
Ipv4StaticRouting::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr)
441
{
441
{
442
  NS_LOG_FUNCTION (this << header << oif);
442
  NS_LOG_FUNCTION (this << header << oif);
443
  Ipv4Address destination = header.GetDestination ();
443
  Ipv4Address destination = header.GetDestination ();
(-)a/src/routing/static-routing/ipv4-static-routing.h (-1 / +1 lines)
 Lines 70-76   public: Link Here 
70
  Ipv4StaticRouting ();
70
  Ipv4StaticRouting ();
71
  virtual ~Ipv4StaticRouting ();
71
  virtual ~Ipv4StaticRouting ();
72
72
73
  virtual Ptr<Ipv4Route> RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
73
  virtual Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &sockerr);
74
74
75
  virtual bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
75
  virtual bool RouteInput  (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
76
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
76
                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,

Return to bug 592