Motivation

This is part of a project to build an acoustic coupler for some old German field telephones, but it might have other uses, too. It is, at least, an interesting way to move data from one computer to another.

Requisites

  • Two Computers with Linux

    • SLIP and slattach

    • minimodem

  • Two cables with 3,5mm audio connectors

Installation

I am doing this on Fedora 24.

sudo dnf -y install minimodem kernel-modules-extra

I had to reboot in order to have slip.ko available.

Set-up

Connect both computer’s audio output to the audio input of each other computer.

We use 4800 baud here, but depending on the quality, you might need to choose a lower value.

The following needs to be done as root on both machines:

$ modprobe slip
$ slattach -v /dev/ptmx -s 4800
cslip started on /dev/ptmx ptsname /dev/pts/3 interface sl0

Note the /dev/pts/3 which will probably be different for you. We will now go and attach two instances of minimodem to it, one for encoding and one for decoding:

$ minimodem -t 4800 </dev/pts/3 &
$ minimodem -c 3 -r 4800 >/dev/pts/3 &

When this is done on both machines, we configure the interfaces. Do the following on both machines, but remember to switch 10.0.0.1 and 10.0.0.2 on one of the machines.

$ ip a a 10.0.0.1 peer 10.0.0.2/32 dev sl0
$ ip link set up sl0

If done correctly, it should be possible to ping the other machine. I get around 650 milliseconds of round-trip time. The large round-trip time is a good indicator that you are actually pinging the other machine instead of „yourself“.

Troubleshooting

This is audio, as such you may have to adjust volume and microphone sensitivity. It helps to listen to both outputs with a head-phone to see if anything is sent at all.

Also play with the confidence option (-c) value for minimodem, which defaults to 1.5.

Conclusion

Results may vary a lot. I was able to SSH from one machine to the other, despite 10% packet loss.

I have also seen, for the first time in my life, a damaged ICMP Echo Reply — very interesting!

64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=648 ms
64 bytes from 10.0.0.2: icmp_seq=11 ttl=64 time=1267 ms
wrong data byte #19 should be 0x13 but was 0x44
#16 10 11 12 44 54 64 74 84 94 a4 b4 c4 d4 e4 f4 3a 1f 0 c 1e 29 99 57 0 0 0 0 c9 41 7 0 0
#48 0 0 0 10 11 12 13 14
64 bytes from 10.0.0.2: icmp_seq=12 ttl=64 time=812 ms

50 packets transmitted, 45 received, 10% packet loss, time 48997ms
rtt min/avg/max/mdev = 612.806/664.631/1267.845/94.324 ms, pipe 2