User Tools

Site Tools


inbox:howto:opencpe

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
inbox:howto:opencpe [2014/08/14 14:31]
tobolff add content
inbox:howto:opencpe [2014/08/14 14:33] (current)
tobolff add github link
Line 1: Line 1:
 +====== A MODULAR CPE MANAGEMENT SYSTEM WITH YANG MODELS AND NETCONF ======
 +
 +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 [[https://​github.com/​opencpe|Github]].
 +
 +{{:​media:​integration_strategy.png|}}
 +
 +====== NETCONF SUPPORT FOR OPENWRT THE OPENCPE WAY ======
 +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 [[https://​github.com/​opencpe/​openwrt-packages/​blob/​master/​README.md|README.md]] for Details (building, installing, using...)
 +
 +====== MAND - A DEVICE MANAGEMENT DAEMON ======
 +mand is a model driven storage 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 [[https://​github.com/​opencpe/​mand/​blob/​master/​README.md|README.md]] for Details (building, installing, using...)
 +
 +====== NETCONF FRONTEND FOR MAND ======
 +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 [[https://​github.com/​opencpe/​freenetconfd/​blob/​master/​README.md|README.md]] for Details (building, installing...)
 +
 +====== MAND OPENWRT 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.
 +
 +{{:​media:​integration_strategy2.png|}}
 +
 +See [[https://​github.com/​opencpe/​mand-cfgd/​blob/​master/​README.md|README.md]] for Details (building, installing...)
 +
 +====== FW AGENT ======
 +The firmware agent is responsible for updating the device firmware and therefore the implementation of this agent
 +is device specific.
 +
 +See [[https://​github.com/​opencpe/​mand-fw/​blob/​master/​README.md|README.md]] for Details (building, installing...)
 +
  
inbox/howto/opencpe.txt · Last modified: 2014/08/14 14:33 by tobolff