Firmware jednočipu G2 to nebyl sto sežrat a pokud jsem na něj chtěl data dostat, musel jsem to vyřešit. Tak jsem Gůglil a zkoušel...
Výsledek mého snažení lze shrnout do těchto bodů:
- Je to víc jak rok známý problém a řeší se, ale ještě není vyřešen.
- Problém není v Javě, ale někde mezi jádrem a síťovkou. Stejný kernel na jiné síťovce funguje, jsou prý kernely, které s těmito síťovkami fungují. V tomto případě to nechodí na Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
- Na vině je chybné generování checksumu síťovkou, neboť při použití Raw Socket (což Java dělá), generuje checksum právě síťovka (nebo její modul, nevím, ve zdrojácích jsem nebyl)
- Řešením je použití TCP checksum offload, které vypíná ono generování kontrolního součtu.
- Na Linuxu se k vypnutí použije
ethtool -K ethN rx off tx off
, kde ethN odpovídá konkrétní síťovce, kde to chcete vypnout (tedy eth0, eth1,...)
Třeba to někomu pomůže...
1 komentář:
Díky za článek. Pomohl. Řeším to samé s CentOS/RHEL a BINDem.
JoLa
Okomentovat