OLPC Networking Problems, Mostly Solved

Bart gifted me an OLPC XO-1 to play with, and I’ve been updating it to use as a Netbook.

I am running Teapot’s build of Xubuntu 8.10 (Intrepid) on a 4Gb SD-card, and it’s a tad slow but it works well; it’s best to avoid video (and some audio) but everything else is fine.

The last major hurdle was the networking; I described the problem in an e-mail to Dan Williams at RedHat, one of the lead folk on the Libertas Wifi chipset driver:

The Wifi connection works fine at home and out-and-about, but when I take it into the office – where we have a huge Wifi network – then a very weird thing happens.

What I see is that some sort of layer-2 connection is established – tcpdump can see frames and packets – and somehow, heavens knows how because of what happens next – but *somehow* it manages to DHCP an IP address and gets ifconfig’d into a sane state perhaps 50% of the time. The other 50% it just sits there, moribund.

But that’s not the weird part.

The weird part is that, in this circumstance, at my workplace, the ARP table is totally empty, and it always remains so. No ARP entries are learned, no ARP responses are seen, even though tcpdump will merrily display the OLPC (and other machines) sending ARP requests.

On one occasion I did see one “partial” ARP response embedded in the table, but that dropped out eventually, and otherwise it was totally blank. I tried hand-hacking the ARP for the default router into the table, but nada – it just bombed.

And of course without an ARP layer, all connection attempts return with “host unreachable”, so the machine is a brick. Like I said, prettymuch everywhere else I tried, it works; but it sucks not having it at work.

…and Dan responded:

Yes, there was a bug about certain Linksys WDS enabled access points at one time, and the interaction of the mesh functionality (the mesh frames look a lot like WDS frames) with WDS nodes.

http://wiki.laptop.org/go/Mesh_and_WDS

You might try to narrow it down by ensuring that the mesh functionality is always turned off; something like:

echo "0" > /sys/class/net/eth0/lbs_mesh

With mesh-enabled firmware, mesh functionality is automatically started in many cases.

…and long story short he’s dead right; I created a /etc/rc2.d startup script which did the above, and suddenly a) the msh0 interface vanished, and b) the laptop could connect to WDS networks.

The only minor niggle is that the mesh networking is reset after a suspend/resume cycle, so there’s still a little plumbing to be done; but the XO is considerably more useful now.

Thanks, Dan, Bart. 🙂

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *