diff --git a/RELEASE_NOTES b/RELEASE_NOTES index c3ca9b996..aa809422e 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -30,6 +30,7 @@ since ns-3.10, in many cases referencing the Bugzilla bug number. - Fixed the UanPhyGen::IsStateBusy method, error with logical OR - CsmaNetDevice ReceiveErrorModel was not dropping the packet - bug 1064 - Correct Friis propagation loss equation in spectrum module + - bug 1046 - Check Aodv LocalDeliver callback before using it Known issues ------------ diff --git a/src/aodv/model/aodv-routing-protocol.cc b/src/aodv/model/aodv-routing-protocol.cc index 2217d176f..6e04447fa 100644 --- a/src/aodv/model/aodv-routing-protocol.cc +++ b/src/aodv/model/aodv-routing-protocol.cc @@ -385,6 +385,12 @@ RoutingProtocol::RouteInput (Ptr p, const Ipv4Header &header, if (IsMyOwnAddress (origin)) return true; + // AODV is not a multicast routing protocol + if (dst.IsMulticast ()) + { + return false; + } + // Broadcast local delivery/forwarding for (std::map , Ipv4InterfaceAddress>::const_iterator j = m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j) @@ -399,9 +405,18 @@ RoutingProtocol::RouteInput (Ptr p, const Ipv4Header &header, return true; } UpdateRouteLifeTime (origin, ActiveRouteTimeout); - NS_LOG_LOGIC ("Broadcast local delivery to " << iface.GetLocal ()); Ptr packet = p->Copy (); - lcb (p, header, iif); + if (lcb.IsNull () == false) + { + NS_LOG_LOGIC ("Broadcast local delivery to " << iface.GetLocal ()); + lcb (p, header, iif); + // Fall through to additional processing + } + else + { + NS_LOG_ERROR ("Unable to deliver packet locally due to null callback " << p->GetUid () << " from " << origin); + ecb (p, header, Socket::ERROR_NOROUTETOHOST); + } if (!EnableBroadcast) { return true; @@ -438,8 +453,16 @@ RoutingProtocol::RouteInput (Ptr p, const Ipv4Header &header, UpdateRouteLifeTime (toOrigin.GetNextHop (), ActiveRouteTimeout); m_nb.Update (toOrigin.GetNextHop (), ActiveRouteTimeout); } - NS_LOG_LOGIC ("Unicast local delivery to " << dst); - lcb (p, header, iif); + if (lcb.IsNull () == false) + { + NS_LOG_LOGIC ("Unicast local delivery to " << dst); + lcb (p, header, iif); + } + else + { + NS_LOG_ERROR ("Unable to deliver packet locally due to null callback " << p->GetUid () << " from " << origin); + ecb (p, header, Socket::ERROR_NOROUTETOHOST); + } return true; }