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

(-)a/src/internet-node/ipv4-header.cc (-18 / +21 lines)
 Lines 178-183    Link Here 
178
  return m_goodChecksum;
178
  return m_goodChecksum;
179
}
179
}
180
180
181
uint16_t
182
Ipv4Header::Checksum(Buffer::Iterator &i)
183
{
184
  uint32_t sum = 0;
185
186
  // doesn't handle ip headers with size != 20 yet
187
  for (int j = 0; j < 10 ; j++)
188
    sum += i.ReadU16 ();
189
190
  while (sum >> 16)
191
    sum = (sum >> 16) + sum & 0xFFFFU;
192
  return ~sum;
193
}
194
181
195
182
TypeId 
196
TypeId 
183
Ipv4Header::GetTypeId (void)
197
Ipv4Header::GetTypeId (void)
 Lines 266-281    Link Here 
266
280
267
  if (m_calcChecksum) 
281
  if (m_calcChecksum) 
268
    {
282
    {
269
#if 0
283
      i = start;
270
      // XXX we need to add Buffer::Iterator::PeekData method
284
      uint16_t checksum = Checksum(i);
271
      uint8_t *data = start.PeekData ();
272
      uint16_t checksum = UtilsChecksumCalculate (0, data, GetSize ());
273
      checksum = UtilsChecksumComplete (checksum);
274
      NS_LOG_LOGIC ("checksum=" <<checksum);
285
      NS_LOG_LOGIC ("checksum=" <<checksum);
275
      i = start;
286
      i = start;
276
      i.Next (10);
287
      i.Next (10);
277
      i.WriteU16 (checksum);
288
      i.WriteU16 (checksum);
278
#endif
279
    }
289
    }
280
}
290
}
281
uint32_t
291
uint32_t
 Lines 312-329    Link Here 
312
322
313
  if (m_calcChecksum) 
323
  if (m_calcChecksum) 
314
    {
324
    {
315
#if 0
325
      i = start;
316
      uint8_t *data = start.PeekData ();
326
      uint16_t checksum = Checksum(i);
317
      uint16_t localChecksum = UtilsChecksumCalculate (0, data, headerSize);
327
      NS_LOG_LOGIC ("checksum=" <<checksum);
318
      if (localChecksum == 0xffff) 
328
319
        {
329
      m_goodChecksum = (checksum == 0);
320
          m_goodChecksum = true;
321
        } 
322
      else 
323
        {
324
          m_goodChecksum = false;
325
        }
326
#endif
327
    }
330
    }
328
  return GetSerializedSize ();
331
  return GetSerializedSize ();
329
}
332
}
(-)a/src/internet-node/ipv4-header.h (-1 / +1 lines)
 Lines 145-151    Link Here 
145
  virtual void Serialize (Buffer::Iterator start) const;
145
  virtual void Serialize (Buffer::Iterator start) const;
146
  virtual uint32_t Deserialize (Buffer::Iterator start);
146
  virtual uint32_t Deserialize (Buffer::Iterator start);
147
private:
147
private:
148
148
  static uint16_t Checksum(Buffer::Iterator &i);
149
  enum FlagsE {
149
  enum FlagsE {
150
    DONT_FRAGMENT = (1<<0),
150
    DONT_FRAGMENT = (1<<0),
151
    MORE_FRAGMENTS = (1<<1)
151
    MORE_FRAGMENTS = (1<<1)

Return to bug 34