---
title: "Creating layers"
author: "Dimitri Staessens"
description: "IRMd"
date: 2019-07-23
#type: page
draft: false
---
The most important structure in recursive networks are layers, that
are built op from [elements](/docs/elements/) called Inter-Process
Communication Processes (IPCPs).
{{
Now, the question is, how do we build these up these layers? IPCPs are
small programs (think of small virtual routers) that need to be
started, configured and managed. This functionality is usually
implemented in some sort of management daemon. Current RINA
implementations call it the *IPC manager*, Ouroboros calls it the
__IPC Resource Management daemon__ or __IRMd__ for short. The IRMd
lies at the heart of each system that is participating in an Ouroboros
network, implementing the core function primitives. It serves as the
entry point for the system/network administrator to manage the network
resources.
We will describe the functions of the Ouroboros IRMd with the
Ouroboros commands for illustration and to make things a bit more
tangible.
The first set of primitives, __create__ (and __destroy__), allow
creating IPCPs of a given *type*. This just runs the process without
any further configuration. At this point, that process is not part of
any layer.
{{
The example above creates a unicast IPCP and gives that IPCP a name
(we called it "my_ipcp"). A listing of the IPCPs in the system shows
that the IPCP is running as process 4157, and it is not part of a
layer ("*Not enrolled*").
To create a new functioning network layer, we need to configure the
IPCP, using a primitive called __bootstrapping__. Bootstrapping sets a
number of parameters for the layer (such as the routing algorithm to
use) and activates the IPCP to allow it to start providing flows. The
Ouroboros command line allows creating an IPCP with some default
values, that are a bit like a vanilla IPv4 network: 32-bit addresses
and shortest-path link-state routing.
{{
Now, we have a single node-network. In order to create a larger
network, we connect and configure new IPCPs using a third primitive
called __enrollment__. When enrolling an IPCP in a network, it will
create a flow (using a lower layer) to an existing member of the
layer, download the bootstrapping information, and use it to configure
itself as part of this layer.
[TODO: enrollment example]
---
Changelog:
2019-07-23: Initial version