|
|
| 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) |
|
|
| 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 |
|
|
| 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 |
} |