dhcpd will discard DHCP request when checksum value of packet is 0xffff.

Cathy Almond cathya at isc.org
Wed Aug 24 18:45:46 UTC 2011


Hi all,

Thanks for your input - we will take a look.  This is now being tracked
as change request #25587 internally.

Please could you refrain from re-adding dhcp-bugs to the cc-list for
this discussion thread.

Kind regards,

Cathy Almond
ISC Support


On 24/08/11 14:51, Joerg Mayer wrote:
> On Wed, Aug 24, 2011 at 04:54:59PM +0900, Yoshihiro takahashi wrote:
>> dhcpd will discard DHCP request when checksum value of packet is 0xffff.
> 
> That's not completely correct: It will discard the packet in case the calculated
> checksum would be 0.
> 
>> 0xffff for checksum value is equivalent to 0x0000.
>> In 0xffff case, is the packet treated as error?
>>
>> RFC768
>> ------
>> If the computed checksum  is zero, it is transmitted as all ones
>> ------
>>
>> dhcp-discover did not work when checksum of packet is 0xffff.
>> ----
>> 52 0.853890 172.18.76.162 172.18.76.161	DHCP DHCP Request - Transaction ID 0x2862
>> Frame 52 (1514 bytes on wire, 1514 bytes captured)
>> Ethernet II, Src: ********* (00:40:66:43:99:b2), Dst: ******** (00:07:32:16:47:b0)
>> Internet Protocol, Src: 172.18.76.162 (172.18.76.162), Dst: 172.18.76.161 (172.18.76.161)
>> User Datagram Protocol, Src Port: bootps (67), Dst Port: bootps (67)
>>   Source port: bootps (67)
>>   Destination port: bootps (67)
>>   Length: 1480
>>   Checksum: 0xffff [validation disabled]
> 
> Validation disabled means that tshark has been instructed to not check wether the
> transmitted checksum is OK.
> 
>> Bootstrap Protocol
>> ----
>>
>>
>> Best regards,
>>
>> diff -aurp dhcp-4.2.2.orig/common/packet.c dhcp-4.2.2/common/packet.c
>> --- dhcp-4.2.2.orig/common/packet.c     2011-08-24 13:44:50.251979028 +0900
>> +++ dhcp-4.2.2/common/packet.c  2011-08-24 14:10:46.688060536 +0900
>> @@ -322,7 +322,10 @@ decode_udp_ip_header(struct interface_in
>>                                            8, IPPROTO_UDP + ulen))));
> 
> It would be easier and clrearer to add in this place:
>     if (sum == 0) sum = 0xffff;
>>
>>    udp_packets_seen++;
>> -  if (usum && usum != sum) {
>> +  /* RFC768
>> +   * If the computed checksum  is zero, it is transmitted as all ones
>> +   */
>> +  if (usum && usum != sum && !(usum == 0xffff && sum == 0)) {
>>           udp_packets_bad_checksum++;
>>           if (udp_packets_seen > 4 &&
>>               (udp_packets_seen / udp_packets_bad_checksum) < 2) {
> 
> Nice find.
> 
> Ciao
>  Joerg
> 




More information about the dhcp-hackers mailing list