diff -u -r ns-3-dev/src/internet/model//udp-l4-protocol.cc workspace/src/ns-3-dev/src/internet/model//udp-l4-protocol.cc --- ns-3-dev/src/internet/model//udp-l4-protocol.cc 2012-01-26 15:52:06.000000000 -0200 +++ workspace/src/ns-3-dev/src/internet/model//udp-l4-protocol.cc 2012-01-30 16:57:18.000000000 -0200 @@ -258,22 +258,13 @@ Ipv4Address saddr, Ipv4Address daddr, uint16_t sport, uint16_t dport) { - NS_LOG_FUNCTION (this << packet << saddr << daddr << sport << dport); - UdpHeader udpHeader; - if(Node::ChecksumEnabled ()) - { - udpHeader.EnableChecksums (); - udpHeader.InitializeChecksum (saddr, - daddr, - PROT_NUMBER); - } + udpHeader.SetDestinationPort (dport); udpHeader.SetSourcePort (sport); - packet->AddHeader (udpHeader); - m_downTarget (packet, saddr, daddr, PROT_NUMBER, 0); + Send (packet, saddr, daddr, sport, dport, 0); } void @@ -283,18 +274,14 @@ { NS_LOG_FUNCTION (this << packet << saddr << daddr << sport << dport << route); - UdpHeader udpHeader; if(Node::ChecksumEnabled ()) { + UdpHeader udpHeader; + packet->PeekHeader(udpHeader); + udpHeader.EnableChecksums (); - udpHeader.InitializeChecksum (saddr, - daddr, - PROT_NUMBER); + udpHeader.InitializeChecksum (saddr, daddr, PROT_NUMBER); } - udpHeader.SetDestinationPort (dport); - udpHeader.SetSourcePort (sport); - - packet->AddHeader (udpHeader); m_downTarget (packet, saddr, daddr, PROT_NUMBER, route); } diff -u -r ns-3-dev/src/internet/model//udp-socket-impl.cc workspace/src/ns-3-dev/src/internet/model//udp-socket-impl.cc --- ns-3-dev/src/internet/model//udp-socket-impl.cc 2012-01-26 15:52:06.000000000 -0200 +++ workspace/src/ns-3-dev/src/internet/model//udp-socket-impl.cc 2012-01-30 17:02:45.000000000 -0200 @@ -31,6 +31,7 @@ #include "udp-socket-impl.h" #include "udp-l4-protocol.h" #include "ipv4-end-point.h" +#include "udp-header.h" #include NS_LOG_COMPONENT_DEFINE ("UdpSocketImpl"); @@ -440,6 +441,13 @@ Ptr route; Ptr oif = m_boundnetdevice; //specify non-zero if bound to a specific device // TBD-- we could cache the route and just check its validity + + // Patch - BUG 1111 - UDP header does not attached before RouteOutput + UdpHeader udpHeader; + udpHeader.SetSourcePort(m_endPoint->GetLocalPort ()); + udpHeader.SetDestinationPort(port); + p->AddHeader(udpHeader); + route = ipv4->GetRoutingProtocol ()->RouteOutput (p, header, oif, errno_); if (route != 0) { @@ -462,8 +470,9 @@ header.SetSource (route->GetSource ()); m_udp->Send (p->Copy (), header.GetSource (), header.GetDestination (), m_endPoint->GetLocalPort (), port, route); - NotifyDataSent (p->GetSize ()); - return p->GetSize (); + + NotifyDataSent (p->GetSize () - udpHeader.GetSerializedSize()); + return (p->GetSize () - udpHeader.GetSerializedSize()); } else {