Modular CPE Management
The goal of the OpenCPE Project was to develop, build and deploy a reusable Customer Premises Equipment (CPE) Software stack, which will meet the requirement of distributed development and carrier scale mass CPE deployment scenarios. The choosen OpenWRT Linux distribution does not contain any remote device management capabilities by design. To close this gap, a modular CPE management system was developed. The purpose of this manual is to describe the design, usage and extensibility of this CPE management system, which uses YANG and netconf.
The whole project is on Github.
OpenCPE
The OpenCPE projects aims to provide NETCONF support in a non-intrusive way. It therefore does not replace OpenWRT UCI framework, but builds on top it. NETCONF support consists of tree main parts:
- NETCONF model and data storage daemon (mand)
- NETCONF protocol frontend (freenetconfd)
- NETCONF to UCI bridge (mand-cfgd)
See README.md for Details (building, installing, using...)
ManD
mand is a model driven storage and device management daemon for device management applications. Its main features are:
- storage engine with model driven data verification
- in-memory during runtime for high performance on low-end devices
- persist to storage on request (not for every change to save flash write cycles)
- access API geared toward typical device management task and external API’s, including:
- model driven RPC API
- get/set/list functionality
- atomic commit of multiple set operations
- publish/subscribe on value changes
- dependency ordered actions, activated on value change/commit
mand is designed to be the binding and storage element between the connection protocol specific frontends (e.g. freenetconfd for NETCONF) and configation agents (e.g. mand-cfgd) that apply configuration changes on a given target device. It also routes special purpose RPC’s from the frontend to the agent. mand is management protocol and data model agnostic. The protocol frontend is responsible for handling the external connection and for translating requests and answers to and from the mand dmconfig API. The frontend is protocol dependant and mostly data model agnostic. The configuration agents are responsible for acting on changes of configuration values. The agents apply them to the running device and report status information. They also implement special purpose API’s (like for example firmware upgrade API). Configuration agents are data model aware and depend on particular entries in those models.
See README.md for Details (building, installing, using...)
NetConf
freenetconfd is NETCONF over ssh frontend for mand. It accepts incoming NETCONF sessions and translates NETCONF requests and RPC to mand’s dmconfig API.
See README.md for Details (building, installing...)
Config Agent
mand-cfg is a configration agent for mand that applies value changes to a OpenWRT system though UCI and report statistic and runtime state values back to mand though mand'd dmconfig RPC API.
It currently implements a limited set of values from IETF YANG NETCONF models for the /system, /system-state, /interfaces and /interfaces-state sub-trees.
For applying and changing configutation values, OpenWRT's uci tool is used. For reading interface configuration and status values, direct Linux system calls, procfs, sysfs and netconf API's are used.
See README.md for Details (building, installing...)
Firmware Agent
The firmware agent is responsible for updating the device firmware and therefore the implementation of this agent is device specific.
See README.md for Details (building, installing...)