Cómo generar de manera confiable errores de trama de Ethernet en el software?

Pregunta

Estoy probando una sección del software de detección de fallas de cable, y me gustaría generar de manera confiable y reproducible fallas de cable en un cable cat5.

En este momento estoy usando una longitud de metro de cable sin retorcer, y meneo el cable manualmente al lado de una fuente de alimentación, pero no puedo detectar fallas en la aplicación (estoy leyendo los contadores de fallas de Ethernet en el ASIC de Ethernet). Si esto se debe a que no se generan fallas o porque la detección de software / hardware es defectuosa, no puedo decirlo.

¿Hay alguna manera de hacer esto en el software?

Me conformaría con escribir algo en un lenguaje de nivel superior, como Java o Python, y como último recurso estaría dispuesto a armarlo en C, pero realmente preferiría no volver a escribir un controlador Ethernet solo para arreglarlo un posible error.

[EDITAR] Quierocrea fallas del cable - no las detecta.

[EDITAR] He transferido archivos grandes a través de FTP y SCP sin problemas con el cable manipulado, y no veo errores al inspeccionar el tráfico con wireshark

[EDITAR] Ver también asimilar pregunta en python.

Solución

Bueno, después de pasar más de un día peleando con C, esta es la solución de Python.

Primero deshabilite la suma de comprobación automática de la tarjeta ethernet:

sudo ethtool -K eth1 tx off

Luego, envíe su marco dudoso desde Python:

#!/usr/bin/env python

from socket import *

#
# Ethernet Frame:
# [
#   [ Destination address, 6 bytes ]
#   [ Source address, 6 bytes      ]
#   [ Ethertype, 2 bytes           ]
#   [ Payload, 40 to 1500 bytes    ]
#   [ 32 bit CRC chcksum, 4 bytes  ]
# ]
#

s = socket(AF_PACKET, SOCK_RAW)
s.bind(("eth1", 0))
src_addr = "\x01\x02\x03\x04\x05\x06"
dst_addr = "\x01\x02\x03\x04\x05\x06"
payload = ("["*30)+"PAYLOAD"+("]"*30)
checksum = "\x00\x00\x00\x00"
ethertype = "\x08\x01"
s.send(dst_addr+src_addr+ethertype+payload+checksum)

Quién dijo que tenía que ser complicado ...

PS: Amo Python.