OpenRF: Code Release

This webpage contains instructions to set up our OpenRF platform to enable interference nulling and coherent beamforming for 802.11n cards. The code is built for Intel Wi-Fi Wireless Link 5300 802.11n MIMO radios, using a custom open source driver. The code extends the 802.11n CSI Tool from the University of Washington.

The alpha release of this tool implements interference nulling and coherent beamforming. The OpenRF controller is not included in this release. For more information about OpenRF, please refer to our paper in SIGCOMM 2013.


To perform this installation, you will need a PC or Laptop with the Intel 5300 Wi-Fi card. Please be prepared to perform a clean installation on this computer.

  1. Download and install Ubuntu 10.04 Server. The ISO is available here: [ISO]
  2. Check out the OpenRF source code:
    svn co
  3. Set up the code:
    sudo ./openrf/setup_scripts/
    You will notice a sequence of commands leading up to a "visudo" window. In this window, perform the following modifcation to the final line:
    # change
    # %admin ALL=(ALL) ALL
    # to
    # %admin ALL=NOPASSWD: ALL
    This disables the need for password checks for sudo.
    Next, you will observe a blue menuconfig menu. You might want to enable certain modules to turn on system specific hardware. If you want to skip this step, select "Exit"
  4. Reboot the machine
  5. Make all scripts:
    sudo ./openrf/setup_scripts/


Testing the code requires MATLAB. We recommend a Matlab version >= R2011a We require two machines to be set up, one for the AP and one for the client.

  1. Start hostapd on the Access Point:
    sudo ./openrf/load_scripts/
  2. Associate with the AP at the Client:
    sudo ./openrf/load_scripts/ openrfap
  3. Run a continuing ping session to exchange packets between the AP and client:
    ping    # Keep running in the background
  4. Navigate to the MATLAB code folder:
    cd ./openrf/linux-80211n-csitool-supplementary/matlab
    Open MATLAB on both access point and client.
  5. At the client, plot the channel on the three client antennas in MATLAB:
    matlab>> csi_init = plot_next_channel;
  6. At the AP, list the MAC address of client(s) on the shell:
    sudo cat `find /sys -name csi_table`
    Note the MAC address of the client you wish to null or beamform at. To then perform nulling at antenna one on the client, run the following in MATLAB:
    matlab>> precod_channel('NULLING', [MAC address]);  
    matlab>>  % e.g. precod_channel('NULLING', '0:16:EA:12:34:56');
    Alternatively, to perform beamforming at antenna one on the client, run the following in MATLAB:
    matlab>> precod_channel('DIVERSITY', [MAC address]); 
    matlab>>  % e.g. precod_channel('DIVERSITY', '0:16:EA:12:34:56');
  7. At the client, plot the channel on the three client antennas after nulling/beamforming:
    matlab>> csi_init = plot_next_channel;
    Verify that the channel at antenna 1 on the client has indeed been nulled (or) beamformed.


  • Bringing Cross-Layer MIMO to Today's Wireless LANs, Swarun Kumar, Diego Cifuentes, Shyamnath Gollakota, and Dina Katabi, ACM SIGCOMM 2013, Hong Kong [PAPER][SLIDES]


Swarun Kumar, Diego Cifuentes, Shyamnath Gollakota and Dina Katabi