17

Question:

I'm testing a section of cable-fault finding software, and I'd like to reliably and reproducibly generate cable faults on a cat5 cable.

At the moment I'm using a meter length of untwisted cable, and wriggle the cable manually next to a power supply, but I cannot detect any faults in the application (I'm reading the Ethernet fault counters off the Ethernet ASIC.) Whether this is because no faults are generated, or because the software/hardware detection is faulty, I cannot tell.

Is there a way to do this in software?

I'd settle for writing something in a higher level language, like Java or python, and as a last resort would be willing to put it together in C, but I'd really rather not re-write an Ethernet driver purely to fix a possible bug.

[EDIT]: I want to create cable faults - not detect them.

[EDIT]: I've transferred large files through FTP and SCP without problems with the doctored cable, and I see no errors coming up while inspecting the traffic with wireshark

[EDIT]: See also a similar question in python.

Solution:

Well, after spending over a day fighting with C, this is the python solution.

First disable automatic checksumming of the ethernet card:

sudo ethtool -K eth1 tx off

Then, send your dodgy frame from 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)

Who said it had to be complicated...

PS: I Love Python.

asked Jun 13, 2011 at 11:06
12
  • Are you trying to detect how your software responds to incorrect packets? Or is your software not recognizing such malformed packets and the reason why they are malformed? Commented Jun 13, 2011 at 11:17
  • 1
    Presumably the "fault detector" is performing checksum-based checks. If you're prepared to generate your own Ethernet frames, then you could inject erroneous checksums? Commented Jun 13, 2011 at 11:17
  • 1
    @Oli - Yes, you're right. It's just checksum based check. Do you of any software that would allow me to put together my own Ethernet frames? Commented Jun 13, 2011 at 11:28
  • Seems like you should be able to do that in software, but it depends on whether you can "get in ahead" of the fault-finding software. Speaking as a former electronics technician, it should be dead simple to create shorts and opens in the cable itself. (Use two cables if you need to, one shorted and one open.) Other faults would be a little trickier. Commented Jun 13, 2011 at 11:28
  • 1
    @brice: If you're working in C, you can send a raw Ethernet frame using socket(AF_INET, SOCK_RAW, ...), and passing it a pointer to a raw buffer that you've generated yourself (e.g. by following the frame layout at en.wikipedia.org/wiki/Ethernet_frame). Commented Jun 13, 2011 at 11:33

1 Answer 1

7

If you're working in C, you can send a raw Ethernet frame using socket(AF_PACKET, SOCK_RAW, ...), and passing it a pointer to a raw buffer that you've generated yourself (e.g. by following the frame layout at wikipedia ).

It's been a long time since I've done this, so I'm not going to attempt to write a representative code snippet...

brice
25.2k7 gold badges82 silver badges97 bronze badges
answered Jun 13, 2011 at 11:51
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.