From 41c90baf3040ee34ec47e6c6d4d2cd3ee142e84a Mon Sep 17 00:00:00 2001 From: Hajime Tazaki Date: Wed, 7 Jul 2010 23:58:40 +0900 Subject: [PATCH] update Bug 932: source address selection in IPv4 HDRINCL --- src/internet-stack/ipv4-raw-socket-impl.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/internet-stack/ipv4-raw-socket-impl.cc b/src/internet-stack/ipv4-raw-socket-impl.cc index 946e05653..e81e3f9e4 100644 --- a/src/internet-stack/ipv4-raw-socket-impl.cc +++ b/src/internet-stack/ipv4-raw-socket-impl.cc @@ -185,6 +185,7 @@ Ipv4RawSocketImpl::SendTo (Ptr p, uint32_t flags, InetSocketAddress ad = InetSocketAddress::ConvertFrom (toAddress); Ptr ipv4 = m_node->GetObject (); Ipv4Address dst = ad.GetIpv4 (); + Ipv4Address src = m_src; if (ipv4->GetRoutingProtocol ()) { Ipv4Header header; @@ -197,16 +198,17 @@ Ipv4RawSocketImpl::SendTo (Ptr p, uint32_t flags, { p->RemoveHeader (header); dst = header.GetDestination (); + src = header.GetSource (); } SocketErrno errno_ = ERROR_NOTERROR;//do not use errno as it is the standard C last error number Ptr route; Ptr oif = m_boundnetdevice; //specify non-zero if bound to a source address - if (!oif && m_src != Ipv4Address::GetAny ()) + if (!oif && src != Ipv4Address::GetAny ()) { - int32_t index = ipv4->GetInterfaceForAddress (m_src); + int32_t index = ipv4->GetInterfaceForAddress (src); NS_ASSERT (index >= 0); oif = ipv4->GetNetDevice (index); - NS_LOG_LOGIC ("Set index " << oif << "from source " << m_src); + NS_LOG_LOGIC ("Set index " << oif << "from source " << src); } // TBD-- we could cache the route and just check its validity