Checksum Offloading

098-1100fsc.jpg

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

Lascia un commento