FreeRouter is a free, open source router os process. It speaks routing protocols, and (re)encapsulates packets on interfaces (a huge list of encapsulation and routing test cases can be found under self-test page) since it handles packets itself, it is independent of underlaying os capabilities (optionally, it can export forwarding tables through openflow or p4 to external switch) since it is an unprivilegized process, it receives and sends packets through sockets there are external, privileged processes that place traffic to these sockets (it means that internet can be used as backplane for router processes) the command line tries to mimic the industry standards with one exception: no global routing table: every routed interface must be in a virtual routing table positive side effect: there are no vrf-awareness questions
This control plane supports a tremendous amount of features, in addition FreeRouter lead developer is part of the RARE team, which dramatically increases development effort related to control Plane/data plane interface communication.
Your own custom control plane
You can adapt your own control plane as soon as it is compliant to RARE dataplane P4 interface. It is recommended though to use FreeRouter as it was built and test against it. RARE P4 data plane interface will be published subsequently. For the brave one or people who are in a hurry, just look at bf_forwarder message loop.