
Qualche tempo fa, stavo cercando di configurare un server DHCP per una piccola LAN (dnsmasq per l’esattezza).
Nonostante diversi tentativi non riuscivo a ottenere un IP dal server, anche se il client inviava vari DHCPDISCOVER e i log del server suggerivano che i relativi pacchetti DHCPOFFER venivano trasmessi.
Dopo diversi tentativi, ho provato a catturare i pacchetti dal lato del client, per accorgermi che i checksum dei pacchetti UDP erano errati, e quindi venivano scartati.
Tutta colpa del Checksum Offloading: una tecnologia che evita al kernel di dover calcolare il checksum di tutti i pacchetti trasmessi (o ricevuti) delegando il compito alla scheda di rete.
Peccato che la mia scheda (e non solo) sbagliasse a calcolare il Checksum per i pacchetti UDP…
La soluzione sta nel disabilitare l’offloading in trasmissione con questo comando:
sudo ethtool -K eth0 rx on tx off
Qualche link:
Ho già segnalato il bug al team di ubuntu: https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/127749
Per maggiori informazioni sul Checksum Offloading: http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.prftungd/doc/prftungd/tcp_checksum_offload.htm
