The aim of this project is to provide a fully functional open source CWMP implementation. This project aims to be fully integrable inside OpenWrt and easily extendible to fit various needs.

To our knowledge freecwmp is the only GPLv2 licensed TR-069 client working out of the box with OpenWrt.


  • freecwmp is CWMP (TR-069) client written to be compliant with CWMP definition at

  • freecwmp is extendible

What can the code already do ?

freecwmp has been successfully tested with:

Code structure

freecwmp is divided into two main parts:

  • freecwmp core which is written in pure C and is in charge of communication with ACS server

  • freecwmp scripts is collection of scripts that execute ACS actions (get or apply setting, download file, upgrade firmware…) on the OS itself

freecwmp scripts are independent of freecwmp core. This way it is easy to add and test new features without the cumbersome process of writing and recompiling C code.

ACS dependent options

  • Every standard and non standard request from TR-* family can be linked with freecwmp script on target device

  • Specific ACS can be selected at compile time in order for freecwmp to be smaller in size. As a side effect this has effect on compliance

  • freecwmp can download and execute any arbitrary script (custom extension)

  • upgrade / install / remove .opkg packages on the device (custom extension)


  • Create howto for specific ACS integration

  • Create howto for users

Getting freecwmp

The code is hosted in a GIT repository.

git clone git://
git clone git://

The documentation is hosted in a GIT repository.

git clone git://

freecwmp has been merged into OpenWrt (commit r32180). We are keeping the original OpenWrt packages repository for development and testing.

git clone git://

Compiling the code and first steps

The code base makes excessive use of existing APIs and libraries from the OpenWrt multiverse. Specifically freecwmp core uses:

  • libuci is used to read freecwmp configuration file

  • libubox

  • libubus

  • libzstream or libcurl can be selected at compile time for HTTP transfers

  • microxml is a fork of Mini-XML, it’s being used to parse XML blocks passed between ACS and the client

freecwmp scripts are using following binaries:

  • sh

  • shlibs

  • uci

  • ubus

  • wget



Mailing list

Our mailing list is hosted on

You can subscribe to the mailing list using web-based interface to Ecartis. More information about subscribing to the mailing list is available here.


We are on channel #freecwmp


The freecwmp code base is maintained by:

  • Luka Perkov - Lead programmer

  • Felix Fietkau - UCI/ubox/ubus libraries

  • Steven Barth - ZStream library

  • Luka Perkov - microxml library

  • John Crispin - Documentation and testing