Project ucwmp is implementation of TR-069 for OpenWrt.
Code is licensed under GPL 2 and can be accessed at http://git.openwrt.org/?p=project/ucwmp.git;a=summary
It consists of few components that are separated binaries.
In TR-069 it's CPE role to initiate connection (session) with ACS (Auto Configuration Server) and this is what
ucwmpd is responsible for. It's a daemon that reads config from
cwmp UCI section (so it's usually located in
/etc/config/cwmp) and starts sessions with ACS when needed.
ucwmpd daemons knows almost nothing about TR-069 protocol, all it understands are events. It needs to be aware of them as it knows exactly the reason for starting a session (this could be
6 CONNECTION REQUEST, etc.).
It registers in
cwmp object with following methods:
| || ||Dump current config (info about ACS, periodic config, etc.)|
| ||?||Update config|
| || ||Request for initializing connection (session) with an ACS|
When session is supposed to be started,
ucwmpd executes external binary called
cwmp-session with the following arguments:
-d <level> Debugging level -e <json> List of events as JSON -I <path> Path to JSON with device info (Manufacturer, ModelName, SerialNumber, etc.) -m <path> Path to JSONs definint data model (eg. TR-098)
Since ACS is a server and CPE is a client, there isn't a stadard way for ACS to initiate a connection. TR-069 however specifies a way to workaround this limitation. ACS can request CPE to initiate session by accessing a special HTTP URL. This way ACS may inform CPE that configuration was updated and ask it to reconfigure without waiting for a periodical request.
ucwmp project this is handled by CGI compatible
connreq binary. It simply requires configuring
uhttpd (or some different HTTP server) to handle some specific URL with a
connreq is called, it verifies ACS request using CGI environment variables (
REQUEST_URI) and calls
connection_request ubus method. As the result
ucwmpd will start a session if the authorization succeeded.