Skip to content

Configuration decomposition

Functional decomposition

Every configuration statement expresses a particular function, this taxonomy decomposes the various types of configuration:

Base configuration

It is present on all nodes, it performs exactly the same functionality, and is adapted to particular values or characteristics of the node itself.

Examples are:

  • SNMP communities: are the same for all the routers, including the client list
  • AAA (local user and radius authentication): the same on all the routers, but the source address of Radius requests is the loopback of the specific device

Once the router has been configured with the base configuration, it is ready for the installation of one or more IP trunks. Doing so will connect it to the rest of the network.

At this point, the router's loopback is reachable via IGP and the new device can be inserted in the network configuring iBGP mesh and adding it to tooling.

✨ Now the router is in service, ready to deliver services. ✨

Service prerequisites

L3VPNs must exist on the router before customer facing services can be configured. There might also be specific communities or routing policies that are generic and are considered as prerequisite for customer connections. This functional block is responsible for this.

Service

This block represents a service on the edge: a L2 circuit or a BGP peer. This block is itself decomposed in other parts, according to the functional parts needed by configuration. In general, a meta-service called a demarcation point is used to identify the physical interface on which the service should be delivered:

A service is always delivered on a VLAN (that can be native VLAN in some particular cases, for example an IP trunk). The VLAN is called a Service Delivery Point.

Separation of data and configuration

Configuration can be seen as the composition of some abstract data structure that represent the business logic, and a template that match the router's specific configuration dialect. In the following example DNS servers on a Juniper and a Nokia router are configured:

DNS servers (abstract data):

system_name_servers:
  - 192.168.1.1
  - 192.168.1.254

Junos template:

system {
  replace: name-server {
  {%- for name_server in system_name_servers %}
    {{ name_server }};
  {%- endfor %}
  }
}
Nokia template:
To be added...