Skip to content


Folders and files

Last commit message
Last commit date

Latest commit



46 Commits

Repository files navigation

Occupy WiFi Firmware

Travis CI Build Status

Occupy WiFi is a concept project built around a portable router that functions as a web server that distributes propaganda, enabling activists, protestors and other freedom of speech advocates to virtually demonstrate in public without being identified as such.

Firmware is provided for TP-Link TL-MR3040 devices which are used for their low price, excellent portability (batteries included!) and flawless support for OpenWrt-based firmware. The devices serve as LAN-only captive portal hotspots that capture and route all traffic to a local web server that serves propaganda of choice. Custom content can be loaded onto USB drives and seamlessly plugged in.

TL-MR3020 and TL-WR703N are both supported as secondary devices for stationary deployments, or with external portable 5V power.

Firmware images baked from this repository are based on the OpenWrt Image Generator framework.


Build supported only on x86_64 Linux machines. Trigger with:

$ ./

Artifacts can be found in OpenWrt-ImageBuilder-ar71xx_generic-for-linux-x86_64/bin/ar71xx.

Precompiled Images

If you can't build an image yourself, you can grab a stable image from the Travis CI build artifacts. Latest stable images:

| Device | Factory | Sysupgrade

:---: | ------ | ------- | ---------- | TL-MR3040 | tl-mr3040-v2-factory.bin | tl-mr3040-v2-sysupgrade.bin | TL-MR3020 | tl-mr3020-v1-factory.bin | tl-mr3020-v1-sysupgrade.bin | TL-WR703N | tl-wr703n-v1-factory.bin | tl-wr703n-v1-sysupgrade.bin


Original Factory Firmware (Web GUI)

  • Access the default firmware via (default user/pass is admin/admin)
  • Go to the Firmware Upgrade menu
  • Upload occupywifi-ar71xx-generic-tl-mr3040-v2-squashfs-factory.bin (make sure you're using the factory image)

Existing OpenWrt Firmware

Copy the sysupgrade image to /tmp:

$ scp occupywifi-ar71xx-generic-tl-mr3040-v2-squashfs-sysupgrade.bin

Then, SSH into the device and run:

$ sysupgrade -n /tmp/occupywifi-ar71xx-generic-tl-mr3040-v2-squashfs-sysupgrade.bin

Note the -n flag that will ensure no old configuration is saved.


Now that your device is flashed, there are several customization steps you'll want to do.


SSH won't be enabled until you set a password, so telnet into the device and set a root user password:

$ telnet
$ passwd

You can now SSH and SCP into your device with root user and the new password.

$ ssh root@

Wireless SSID

The default wireless SSID is OccupyWiFi, and is defined in /etc/config/wireless.

Captive Portal Content

The OccupyWifi image provides a simple default captive portal webpage. New content can be easily deployed by sticking a USB drive into the device. The are a few requirements for loading content from the USB:

  • USB drive must contain a single partition which is formatted as a FAT filesystem
  • Entry point must be a single splash.html page on the USB drive root directory
  • Any other pages or static assets must be hosted under the static/ directory
  • Other content that does not match these specifications will not be served by the captive portal