Sinon, j'ai survolé rapidement la datasheet du marvell 88F6281 (même si d'après un démontage le chipset semble être un 88E6161).
le 6161 c'est le switch, le 6281 c'est le kirkwood
Autant pour la réception de paquets IPv6 les checksum, c'est à la main, autant je pense qu'en transmission TCP/UDP IPv6, il y a un moyen de limiter le calcul du checksum au pseuso-header, puis de laisser le hardware s'occuper du reste en "feignant" un entête IPv4 de 40 octets (<IPv4HdLen> = 0xa) et en lui passant le checksum du pseudo-header (dans <L4iChk> field) + <L4Chk_Mode> = 0 pour pas que le hard calcul avec le mauvais pseudo-header. Mais ça a peut-être déjà été testé et c'est même implèmenté (ou alors ça ne fonctionne pas).
bon c'était trop beau.
pour connaître la taille de TCP + DATA afin de faire l'opération de checksum, le hardware se sert du total_length IPv4.
Au même endroit dans l'IPv6 il y a le flow label, généralement à 0. Dans ce cas çà donne une taille négative et ça checksum aléatoirement n'importe quoi.
en patchant le flow label pour chaque paquet pour émuler total_length cela fonctionne parfaitement, mais vous serez d'accord que ce n'est pas une bonne idée.