From 6bde2bde12ccdaf39ff93439ed073533797f25b6 Mon Sep 17 00:00:00 2001
From: Tommaso Pecorella
Date: Wed, 18 Jun 2014 19:03:10 +0200
Subject: [PATCH] Bug 1921 - Icmpv6L4Protocol::ForgeEchoRequest returns a
malformed packet
---
CHANGES.html | 2 ++
RELEASE_NOTES | 1 +
src/internet/model/icmpv6-l4-protocol.cc | 9 +++++++++
src/internet/model/icmpv6-l4-protocol.h | 2 +-
4 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/CHANGES.html b/CHANGES.html
index b4fdb9f40..9ac3a4e5f 100644
--- a/CHANGES.html
+++ b/CHANGES.html
@@ -58,6 +58,8 @@ us a note on ns-developers mailing list.
Changes to existing API:
+ - "Icmpv6L4Protocol::ForgeEchoRequest" is now returning a packet with the proper IPv6 header.
+
Changes to build system:
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index e17fcf50f..f919a9bb9 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -24,6 +24,7 @@ New user-visible features
Bugs fixed
----------
+- Bug 1921 - Icmpv6L4Protocol::ForgeEchoRequest returns a malformed packet
- Bug 1930 - Use of invalid reference in OLSR RemoveLinkTuple
- Bug 1932 - NdiscCache entry is not failsafe on double neighbor probing.
diff --git a/src/internet/model/icmpv6-l4-protocol.cc b/src/internet/model/icmpv6-l4-protocol.cc
index f1b0a3a8e..380011453 100644
--- a/src/internet/model/icmpv6-l4-protocol.cc
+++ b/src/internet/model/icmpv6-l4-protocol.cc
@@ -588,8 +588,17 @@ Ptr Icmpv6L4Protocol::ForgeEchoRequest (Ipv6Address src, Ipv6Address dst
req.SetId (id);
req.SetSeq (seq);
+ req.CalculatePseudoHeaderChecksum (src, dst, p->GetSize () + req.GetSerializedSize (), PROT_NUMBER);
p->AddHeader (req);
+ ipHeader.SetSourceAddress (src);
+ ipHeader.SetDestinationAddress (dst);
+ ipHeader.SetNextHeader (PROT_NUMBER);
+ ipHeader.SetPayloadLength (p->GetSize ());
+ ipHeader.SetHopLimit (255);
+
+ p->AddHeader (ipHeader);
+
return p;
}
diff --git a/src/internet/model/icmpv6-l4-protocol.h b/src/internet/model/icmpv6-l4-protocol.h
index e46511105..6d2fdf5ac 100644
--- a/src/internet/model/icmpv6-l4-protocol.h
+++ b/src/internet/model/icmpv6-l4-protocol.h
@@ -329,7 +329,7 @@ public:
* \param id ID of the packet
* \param seq sequence number
* \param data the data
- * \return Echo Request packet (without IPv6 header)
+ * \return Echo Request packet (with IPv6 header)
*/
Ptr ForgeEchoRequest (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr data);