summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAjay Dudani2013-05-22 23:16:59 -0500
committerVineeta Srivastava2013-12-12 13:24:26 -0600
commit1c87ae05b337f789b2e56bbb273758dfb12fb2ef (patch)
treedc134d88e869a3847eac5d35138c26360b9fd8a1 /libnetutils
parent5f64d528be2ca7229c0e9ce00837ac0fa4da2e54 (diff)
downloadplatform-system-core-1c87ae05b337f789b2e56bbb273758dfb12fb2ef.tar.gz
platform-system-core-1c87ae05b337f789b2e56bbb273758dfb12fb2ef.tar.xz
platform-system-core-1c87ae05b337f789b2e56bbb273758dfb12fb2ef.zip
libnetutils: Expect 1's complement if computed UDP checksum is zero
Per http://tools.ietf.org/html/rfc768: If the computed checksum is zero, it is transmitted as all ones (the equivalent in one's complement arithmetic). An all zero transmitted checksum value means that the transmitter generated no checksum (for debugging or for higher level protocols that don't care). Bug: 10642341 Change-Id: Ib6296dcf3f420f87227047a645c99d9f7ea0d437
Diffstat (limited to 'libnetutils')
-rw-r--r--libnetutils/packet.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/libnetutils/packet.c b/libnetutils/packet.c
index be4e0db41..3cdefb08b 100644
--- a/libnetutils/packet.c
+++ b/libnetutils/packet.c
@@ -230,6 +230,8 @@ int receive_packet(int s, struct dhcp_msg *msg)
230 packet.udp.check = 0; 230 packet.udp.check = 0;
231 sum = finish_sum(checksum(&packet, nread, 0)); 231 sum = finish_sum(checksum(&packet, nread, 0));
232 packet.udp.check = temp; 232 packet.udp.check = temp;
233 if (!sum)
234 sum = finish_sum(sum);
233 if (temp != sum) { 235 if (temp != sum) {
234 ALOGW("UDP header checksum failure (0x%x should be 0x%x)", sum, temp); 236 ALOGW("UDP header checksum failure (0x%x should be 0x%x)", sum, temp);
235 return -1; 237 return -1;