src/routing/olsr/olsr-routing-protocol.cc
changeset 5761 55f21c521021
parent 5757 c2dc9d69d547
child 5772 a8245e39c546
equal deleted inserted replaced
5760:4f08a0837018 5761:55f21c521021
   217 
   217 
   218 void RoutingProtocol::DoDispose ()
   218 void RoutingProtocol::DoDispose ()
   219 {
   219 {
   220   m_ipv4 = 0;
   220   m_ipv4 = 0;
   221 
   221 
   222   for (std::map< Ptr<Socket>, Ipv4Address >::iterator iter = m_socketAddresses.begin ();
   222   for (std::map< Ptr<Socket>, Ipv4InterfaceAddress >::iterator iter = m_socketAddresses.begin ();
   223        iter != m_socketAddresses.end (); iter++)
   223        iter != m_socketAddresses.end (); iter++)
   224     {
   224     {
   225       iter->first->Close ();
   225       iter->first->Close ();
   226     }
   226     }
   227   m_socketAddresses.clear ();
   227   m_socketAddresses.clear ();
   276       if (socket->Bind (InetSocketAddress (addr, OLSR_PORT_NUMBER)))
   276       if (socket->Bind (InetSocketAddress (addr, OLSR_PORT_NUMBER)))
   277         {
   277         {
   278           NS_FATAL_ERROR ("Failed to bind() OLSR receive socket");
   278           NS_FATAL_ERROR ("Failed to bind() OLSR receive socket");
   279         }
   279         }
   280       socket->Connect (InetSocketAddress (Ipv4Address (0xffffffff), OLSR_PORT_NUMBER));
   280       socket->Connect (InetSocketAddress (Ipv4Address (0xffffffff), OLSR_PORT_NUMBER));
   281       m_socketAddresses[socket] = addr;
   281       m_socketAddresses[socket] = m_ipv4->GetAddress (i, 0);
   282     }
   282     }
   283 
   283 
   284   HelloTimerExpire ();
   284   HelloTimerExpire ();
   285   TcTimerExpire ();
   285   TcTimerExpire ();
   286   MidTimerExpire ();
   286   MidTimerExpire ();
   303   Address sourceAddress;
   303   Address sourceAddress;
   304   receivedPacket = socket->RecvFrom (sourceAddress);
   304   receivedPacket = socket->RecvFrom (sourceAddress);
   305 
   305 
   306   InetSocketAddress inetSourceAddr = InetSocketAddress::ConvertFrom (sourceAddress);
   306   InetSocketAddress inetSourceAddr = InetSocketAddress::ConvertFrom (sourceAddress);
   307   Ipv4Address senderIfaceAddr = inetSourceAddr.GetIpv4 ();
   307   Ipv4Address senderIfaceAddr = inetSourceAddr.GetIpv4 ();
   308   Ipv4Address receiverIfaceAddr = m_socketAddresses[socket];
   308   Ipv4Address receiverIfaceAddr = m_socketAddresses[socket].GetLocal ();
   309   NS_ASSERT (receiverIfaceAddr != Ipv4Address ());
   309   NS_ASSERT (receiverIfaceAddr != Ipv4Address ());
   310   NS_LOG_DEBUG ("OLSR node " << m_mainAddress << " received a OLSR packet from "
   310   NS_LOG_DEBUG ("OLSR node " << m_mainAddress << " received a OLSR packet from "
   311                 << senderIfaceAddr << " to " << receiverIfaceAddr);
   311                 << senderIfaceAddr << " to " << receiverIfaceAddr);
   312   
   312   
   313   // All routing messages are sent from and to port RT_PORT,
   313   // All routing messages are sent from and to port RT_PORT,
  2651     }
  2651     }
  2652   return rtentry;
  2652   return rtentry;
  2653 }
  2653 }
  2654 
  2654 
  2655 bool RoutingProtocol::RouteInput  (Ptr<const Packet> p, 
  2655 bool RoutingProtocol::RouteInput  (Ptr<const Packet> p, 
  2656   const Ipv4Header &header, Ptr<const NetDevice> idev,                            UnicastForwardCallback ucb, MulticastForwardCallback mcb,             
  2656   const Ipv4Header &header, Ptr<const NetDevice> idev,                            
       
  2657   UnicastForwardCallback ucb, MulticastForwardCallback mcb,             
  2657   LocalDeliverCallback lcb, ErrorCallback ecb)
  2658   LocalDeliverCallback lcb, ErrorCallback ecb)
  2658 {   
  2659 {   
  2659   NS_LOG_FUNCTION (this << " " << m_ipv4->GetObject<Node> ()->GetId() << " " << header.GetDestination ());
  2660   NS_LOG_FUNCTION (this << " " << m_ipv4->GetObject<Node> ()->GetId() << " " << header.GetDestination ());
  2660   
  2661   
       
  2662   Ipv4Address dst = header.GetDestination ();
       
  2663   Ipv4Address origin = header.GetSource ();
       
  2664 
       
  2665   // Consume self-originated packets
       
  2666   if (IsMyOwnAddress (origin) == true)
       
  2667     {
       
  2668       return true; 
       
  2669     }
       
  2670   
       
  2671   // Local delivery
       
  2672   NS_ASSERT (m_ipv4->GetInterfaceForDevice (idev) >= 0);
       
  2673   uint32_t iif = m_ipv4->GetInterfaceForDevice (idev);
       
  2674   if (m_ipv4->IsDestinationAddress (dst, iif))
       
  2675     {
       
  2676         NS_LOG_LOGIC ("Local delivery to " << dst);
       
  2677         lcb (p, header, iif);
       
  2678         return true;
       
  2679     }
       
  2680   
       
  2681   // Forwarding
  2661   Ptr<Ipv4Route> rtentry;
  2682   Ptr<Ipv4Route> rtentry;
  2662   RoutingTableEntry entry1, entry2; 
  2683   RoutingTableEntry entry1, entry2; 
  2663   if (Lookup (header.GetDestination (), entry1))
  2684   if (Lookup (header.GetDestination (), entry1))
  2664     { 
  2685     { 
  2665       bool foundSendEntry = FindSendEntry (entry1, entry2);
  2686       bool foundSendEntry = FindSendEntry (entry1, entry2);
  2918   : TestSuite("routing-olsr", UNIT)
  2939   : TestSuite("routing-olsr", UNIT)
  2919 {
  2940 {
  2920   AddTestCase (new OlsrMprTestCase ());
  2941   AddTestCase (new OlsrMprTestCase ());
  2921 }
  2942 }
  2922 
  2943 
       
  2944 bool
       
  2945 RoutingProtocol::IsMyOwnAddress (const Ipv4Address & a) const
       
  2946 {
       
  2947   for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j =
       
  2948       m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
       
  2949     {
       
  2950       Ipv4InterfaceAddress iface = j->second;
       
  2951       if (a == iface.GetLocal ())
       
  2952         {
       
  2953           return true;
       
  2954         }
       
  2955     }
       
  2956   return false;
       
  2957 }
       
  2958 
  2923 
  2959 
  2924 }} // namespace olsr, ns3
  2960 }} // namespace olsr, ns3
  2925 
  2961 
  2926 
  2962