[Ns-developers] Checksum patch
Mathieu Lacage
mathieu.lacage at sophia.inria.fr
Wed Jun 25 10:38:00 PDT 2008
hi sebastien,
Thanks for this new patch. Comments inline below.
On Wed, 2008-06-25 at 15:51 +0200, Sébastien Vincent wrote:
> I propose a patch that do this stuff. The code is located at
> https://svnet.u-strasbg.fr/hg/ns-3-checksum (it is based on last
> ns-3-dev).
Are you sure that this works ? Did you test it ?
+ Config::SetDefault("ns3::UdpHeader::CalcChecksum", BooleanValue("true"));
@@ -130,8 +136,52 @@ TcpHeader::InitializeChecksum (Ipv4Addre
Ipv4Address destination,
uint8_t protocol)
{
- m_checksum = 0;
-//XXX requires peeking into IP to get length of the TCP segment
+ Buffer buf(12);
^^^^^
Please, use this syntax instead:
Buffer buf = Buffer (12);
It is exactly the same from the point of view of the compiler and is
much more readable (to me, at least).
Instead of using a default value:
+ uint16_t CalculateIpChecksum(uint16_t size, uint32_t initialChecksum = 0);
can you instead provide two overloaded methods ?
@@ -208,7 +266,7 @@ uint32_t TcpHeader::Deserialize (Buffer:
m_flags = field & 0x3F;
m_length = field>>12;
m_windowSize = start.ReadNtohU16 ();
- m_checksum = start.ReadNtohU16 ();
+ m_checksum = start.ReadU16 ();
^^^^^^^^^^^^^^^^
Are you sure that this ReadU16 is correct ? I see you have a matching
WriteU16 above in Serialize but, did you test this code on a non-x86
box ?
in TcpL4Protocol::Receive, the code would be probably easier to write if
we provided a Packet::PeekHeader function. I will add this to ns-3-dev
after the 3.1 release.
@@ -25,7 +27,7 @@ namespace ns3 {
NS_OBJECT_ENSURE_REGISTERED (UdpHeader);
-bool UdpHeader::m_calcChecksum = false;
+/* bool UdpHeader::m_calcChecksum = false; */
Instead of commenting out code, delete it if it is unused.
Rather than use:
bool UdpHeader::IsChecksumOk(const uint8_t* payload) const;
bool TcpHeader::IsChecksumOk(const uint8_t* payload) const;
please, do this:
bool UdpHeader::IsChecksumOk(void) const;
bool TcpHeader::IsChecksumOk(void) const;
and make both methods return a bool m_goodChecksum and set
m_goodChecksum from TcpHeader::Deserialize and UdpHeader::Deserialize.
I do not understand the changes to Ipv4Header::Deserialize: the code did
not work before ? If so, can you point me to a testcase ?
Finally, I think that we really do not want to enable checksum
calculation in tcp by default, even if the standard requires it. So, can
you also add a flag there which is disabled by default ?
The implementation of that flag should be inspired by the Ipv4L3Protocol
checksum flag, that is: add an attribute flag to TcpL4Protocol and
UdpL4Protocol and use it to call TcpHeader::EnableChecksum and
UdpHeader::EnableChecksum
regards,
Mathieu
More information about the Ns-developers
mailing list