View | Details | Raw Unified | Return to bug 34
Collapse All | Expand All

(-)a/src/node/ipv4-header.cc (-18 / +23 lines)
 Lines 178-183    Link Here 
178
  return m_goodChecksum;
178
  return m_goodChecksum;
179
}
179
}
180
180
181
uint16_t
182
Ipv4Header::ChecksumCalculate(Buffer::Iterator &i, uint16_t size)
183
{
184
  /* see RFC 1071 to understand this code. */
185
  uint32_t sum = 0;
186
187
  for (int j = 0; j < size/2; j++)
188
    sum += i.ReadU16 ();
189
190
  if (size & 1)
191
     sum += i.ReadU8 ();
192
193
  while (sum >> 16)
194
    sum = (sum & 0xffff) + (sum >> 16);
195
  return ~sum;
196
}
181
197
182
TypeId 
198
TypeId 
183
Ipv4Header::GetTypeId (void)
199
Ipv4Header::GetTypeId (void)
 Lines 266-281    Link Here 
266
282
267
  if (m_calcChecksum) 
283
  if (m_calcChecksum) 
268
    {
284
    {
269
#if 0
285
      i = start;
270
      // XXX we need to add Buffer::Iterator::PeekData method
286
      uint16_t checksum = ChecksumCalculate(i, 20);
271
      uint8_t *data = start.PeekData ();
272
      uint16_t checksum = UtilsChecksumCalculate (0, data, GetSize ());
273
      checksum = UtilsChecksumComplete (checksum);
274
      NS_LOG_LOGIC ("checksum=" <<checksum);
287
      NS_LOG_LOGIC ("checksum=" <<checksum);
275
      i = start;
288
      i = start;
276
      i.Next (10);
289
      i.Next (10);
277
      i.WriteU16 (checksum);
290
      i.WriteU16 (checksum);
278
#endif
279
    }
291
    }
280
}
292
}
281
uint32_t
293
uint32_t
 Lines 313-330    Link Here 
313
325
314
  if (m_calcChecksum) 
326
  if (m_calcChecksum) 
315
    {
327
    {
316
#if 0
328
      i = start;
317
      uint8_t *data = start.PeekData ();
329
      uint16_t checksum = ChecksumCalculate(i, headerSize);
318
      uint16_t localChecksum = UtilsChecksumCalculate (0, data, headerSize);
330
      NS_LOG_LOGIC ("checksum=" <<checksum);
319
      if (localChecksum == 0xffff) 
331
320
        {
332
      m_goodChecksum = (checksum == 0);
321
          m_goodChecksum = true;
322
        } 
323
      else 
324
        {
325
          m_goodChecksum = false;
326
        }
327
#endif
328
    }
333
    }
329
  return GetSerializedSize ();
334
  return GetSerializedSize ();
330
}
335
}
(-)a/src/node/ipv4-header.h (-1 / +2 lines)
 Lines 131-137    Link Here 
131
  Ipv4Address GetDestination (void) const;
131
  Ipv4Address GetDestination (void) const;
132
  
132
  
133
  /**
133
  /**
134
   * \returns true if the upv4 checksum is correct, false otherwise.
134
   * \returns true if the ipv4 checksum is correct, false otherwise.
135
   *
135
   *
136
   * If Ipv4Header::EnableChecksums has not been called prior to
136
   * If Ipv4Header::EnableChecksums has not been called prior to
137
   * creating this packet, this method will always return true.
137
   * creating this packet, this method will always return true.
 Lines 146-151    Link Here 
146
  virtual uint32_t Deserialize (Buffer::Iterator start);
146
  virtual uint32_t Deserialize (Buffer::Iterator start);
147
private:
147
private:
148
148
149
  static uint16_t ChecksumCalculate(Buffer::Iterator &i, uint16_t len);
149
  enum FlagsE {
150
  enum FlagsE {
150
    DONT_FRAGMENT = (1<<0),
151
    DONT_FRAGMENT = (1<<0),
151
    MORE_FRAGMENTS = (1<<1)
152
    MORE_FRAGMENTS = (1<<1)

Return to bug 34