udp checksum implementation error in FreeBSD 7.2?
Dmitry Banschikov
d.banschikov at peterhost.ru
Tue Jun 28 15:46:31 UTC 2011
On 28.06.2011 13:48, Benoit Panizzon wrote:
> Hi
>
> We are running a DHCP Server on a FreeBSD 7.2-RELEASE-p4 box.
>
> This works for most of our customers, except ones with some kind of SonicWall
> Firewalls. We have analyzed the problem with the sonicwall tech support:
>
> We found the problem being in the sonicwall setting a UDP checksum of 0x0000
> for DHCP Requests.
>
> According to the RFC this is a valid value and tells the receiving UDP stack
> not to check the checksum:
>
> http://www.faqs.org/rfcs/rfc768.html
>
> If the value is different from 0x0000 the receiving UDP stack can perform a
> checksum check and if this fails, silently drop that packet.
>
> What we observe is:
>
> DHCP Request with UDP checksum set => Packet reaches DHCP Daemon and is being
> answered.
> DHCP Request with UDP checksum 0x0000 => ICMP Port Unreachable from FreeBSD.
>
> Can someone confirm this non RFC conform behaviour and knows how to fix it?
>
> As I understand, setting net.inet.udp.checksum to zero would not fix the
> problem, as this is only for packet generation.
DHCP (isc-dhcp) uses bpf(4) device for reading and writing dhcp packets.
Since bpf(4) device provides raw access to ether frames, udp checksum
calculation must take place in the dhcp server code. You could use
ktrace(1) if you want to make sure that a icmp packet is generated by
the dhcp server. Also, you have said that icmp error message is port
unreachable, that means, that there is no any udp socket which listens
on 67 port. Can you check if dhcp-server listens on 67-udp port and
there is no any firewall rules, which forbids udp packet to 67 port?
--
Dmitry Banschikov
More information about the freebsd-net
mailing list