\r
sub checksum {\r
my $pkt = shift;\r
- my $cksum;\r
-\r
- $cksum = 0;\r
- foreach my $chr (map(ord, split(//, $pkt))) {\r
- $cksum += $chr;\r
- }\r
- $cksum = (-$cksum) & 0xFFFF;\r
\r
- return $cksum;\r
+ return (-unpack('%16U*', $pkt) & 0xFFFF);\r
}\r
\r
sub verify_cksum {\r
# Convert the checksum back to hex and calculate the sum of the\r
# pack without the checksum.\r
$cksum = hex(substr($pkt, -4));\r
- $shortsum = unpack("%16C*", substr($pkt, 0, -4));\r
+ $shortsum = unpack("%16U*", substr($pkt, 0, -4));\r
\r
# The checksum is valid if the hex sum, plus the checksum of the \r
# base packet short when truncated to 16 bits.\r