Experiments with WDS

posted in: comm, uav | 0

It’s actually surprisingly easy to add WDS (assuming that nothing goes wrong like it always does).

Hardware Primer

As an AUVSI-UCR default, we go with Ubiquiti products.  This is mainly because we saw that other teams, CUAir is an example, extensively use Ubiquiti products!  We own a BulletM2 and a NanoStationM2.

We also have a DD-WRT enabled router donated by Brian which serves as our main switch and otherwise provides internet access for everybody connected to the network.  If you haven’t heard about DD-WRT, it’s a very popular router firmware based on linux and features lots of cool toys (ddns client, dhcp server, ntp server, http server, the works).

The bulk of the work

So how does one enable WDS?  I mainly followed the links with Ubiquiti (here) and looked at some DD-WRT documentation (here).

The documentation for everything is pretty basic.

  1. Set things to “AP WDS” or turn on some kind of WDS checkbox.
  2. Set your SSID and password to the same thing throughout the network
  3. Bear in mind that encryption only works with WEP (or you can use another authentication mechanism that isn’t WPA)
  4. Let all nodes know the MAC addresses of other nodes

Surprisingly enough, the WDS systems worked together even though it isn’t officially an IEEE standard!  This is documented in the DD-WRT wiki (even though I didn’t actually read it until now, hehe).


Testing your new WDS network shouldn’t be that difficult unless you have nodes in hard-to-access places.  Here is the general human pseudo-code.

#include <human>
#include <laptop>
#include <exit_status.h>
int main()
    class _human_t human;
    class _laptop_t laptop;
    _node_t* node;
    for (int i = 0; node[i]; i++) {
        human.use(laptop, laptop.wifi_connect(node[i]));
        if (human.use(laptop, laptop.browse("nyan.cat")))
            /* do nothing.  nyan cat loads successfully. */
            /* nyan cat does not load successfully */
            return FAIL;
        human.use(laptop, laptop.wifi_disconnect());
    return SUCCESS;

Our Issues

Specifically, we had a pretty serious issue with using the BulletM2.  When the bullet is powered on in WDS mode, it somehow ends up slowing the network down to a halt.

How?  I don’t know.  Why?  I don’t know.  What I do know is that pings to the main router (DD-WRT) which is about 2 feet away take around one second.

So the bullet’s probably going to be on station mode forever.  WDS works well enough to the point that nobody is complaining, so there is no real problem.

Pretty Pictures from Debugging

I did do a bit of debugging from the bullet spectrum analyzer simply because I thought it was cool.

Here is a picture.  Bear in mind that we are on channel 6 (channel centers at 2.537 GHz) and our channel width is set to 20MHz.  This heatmap represents this pretty well.10608799_10152761627001385_8172204536248945498_o

Leave a Reply

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