Как надежно генерировать ошибки фрейма Ethernet в программном обеспечении?

Вопрос:

Я тестирую раздел программного обеспечения для поиска неисправностей, и я хотел бы надежно и воспроизводимо генерировать ошибки кабеля на кабеле cat5.

В настоящий момент я использую длину раскрученного кабеля метра и извиняю кабель вручную рядом с источником питания, но я не могу обнаружить какие-либо ошибки в приложении (я читаю счетчики сбоев Ethernet с Ethernet ASIC.) это происходит потому, что никаких сбоев не генерируется или из-за неисправности программного обеспечения / аппаратного обеспечения я не могу сказать.

Есть ли способ сделать это в программном обеспечении?

Я бы согласился написать что-то на языке более высокого уровня, например Java или python, и, как последнее средство, было бы желательно собрать его на C, но я бы предпочел не переписывать драйвер Ethernet исключительно для исправления возможный ошибка.

[EDIT]: Я хочу создать неисправности кабеля – не обнаруживать их.

[EDIT]: Я передал большие файлы через FTP и SCP без проблем с укомплектованным кабелем, и я не вижу ошибок при проверке трафика с помощью wirehark

[EDIT]: См. Также аналогичный вопрос в python .

Решение:

Ну, после того, как вы провели день, сражаясь с C, это решение python.

Сначала отключите автоматическую проверку карты Ethernet:

sudo ethtool -K eth1 tx off 

Затем отправьте свой изворотливый фрейм из 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) 

Кто сказал, что это должно быть сложно …

PS: Я люблю Питона.

One Solution collect form web for “Как надежно генерировать ошибки фрейма Ethernet в программном обеспечении?”

Если вы работаете на C, вы можете отправить необработанный Ethernet-фрейм с помощью socket(AF_PACKET, SOCK_RAW, ...) и передать ему указатель на необработанный буфер, который вы создали сами (например, следуя схеме кадра в Википедия ).

Прошло много времени с тех пор, как я это сделал, поэтому я не собираюсь писать репрезентативный фрагмент кода …

Python - лучший язык программирования в мире.