I’ve been working quite a while now on the ENABLE project, specifically, we are looking at mobility protocols and evaluations of them. We have Mobile IPv6 running in the lab, and are currently working on building a Ubuntu LiveCD that is Mobile IPv6 Enabled. We are also looking at SHIM6 which, strictly speaking isn’t a Mobility protocol but a Multi-Homing Protocol. Thouth, in my (humble) opinion, in certain cases, there is little or no difference from the user perspective, but i digress.
Sébastien Barré has developed what he calls himself a “Pre-Alpha” implementation of SHIM6 available from http://gforge.info.ucl.ac.be/projects/shim6. I’ve been experimenting with it over the last week or so to see if I could get it working. In doing so I uncovered a subtle bug that took a bit of time for Sébastien and I to figure out (Credit to Sébastien).
Deliberately, we constructed identical set ups. Machine A with two ethernet ports (fec0::1, fec0::2), and machine B with one ethernet port (fec0::3). Sébastien was seeing correct behaviour, I was not (insert suitable expletives here!).
The correct behaviour would be to ssh to fec0::1 from fec0::3, disconnect the cable from fec0::1 and find that the session continues to work as normal (there is a 10 second delay for the protocol to spot that the connection has dissapeared, and for it to redirect the traffic). He was logging in using ssh and typing commands and it was all working fine. I was using scp and it wasn’t, then I logged in, ran ‘top’ and it still wasn’t, but strangely it was when I was just using single commands such as ls, df etc.
I’m still kicking myself for not spotting what was wrong sooner. Fair enough the code is pre-alpha, but roughly he is tagging the shim6 extension headers onto the TCP Packet. Using scp or top, the ethernet bursts are 1500 bytes long. His code sticks 8 bytes onto it and its now 1508 bytes long. Which means it breaks. My temporary solution is to run the command:
ifconfig mtu 1400
on every ethernet interface. Its working now (even Jerry H. was impressed), and rather than continue to hassle Sébastien, it might be time to start digging into code and attempt to fix it… god help us all!