There are two pieces of config change compared to previous releases that are mandatory.

One is in the device configuration, where "ipv4Loopback" and "ipv4NodeSid" should be used in place of the earlier notation "routerIp" and "nodeSid" respectively.

The other change is in interface configuration, where the vlan configuration (either untagged or tagged) is mandatory. Note that even if you are not using VLANs in your setup, you still need to configure "vlan-untagged" on the interface. See the child page on port/vlan configuration for more details.



Following applications need to be enabled depending on which features are being used.





  1. The 'openflow' app is a meta app that loads the following apps - 'openflow-base', 'lldpprovider' (used for discovering links) and 'hostprovider' (used for discovering hosts). Always required.

  2. The 'segmentrouting' app controls forwarding in the fabric. Always required.
  3. The erstwhile 'vrouter' app for external connectivity has been broken up into several apps, only one of which we use in the underlay fabric - 'fpm'. Required if connecting to external router. Required in CORD.

  4. The 'netcfghostprovider' app is necessary to configure hosts when a DHCP server is not being used (see Host configuration section). Required in CORD as dhcprelay is not used.
  5. The 'aaa' app needs to be dynamically loaded, directions for which are shown in the AAA section under Additional Features. Not required in CORD for the fabric, as 802.1x is done via the OLT/vOLT.

  6. The 'dhcprelay' app needs to be included when opting for DHCP relay (see Additional Features). Not used in CORD.
  7. The 'netcfghostprovider' app is also necessary for configuring IPv6 hosts, as we do not support DHCP relay for IPv6 (see the Additional Features section for IPv6). CORD is not IPv6 ready, but this app is still required for configuring IPv4 hosts as dhcprelay is not used in CORD.

Device Configuration


EACH device in the underlay fabric requires a device config. 

"devices" : {
  "of:0000000000000001" : {
    "segmentrouting" : {
      "name" : "Leaf-R1",
      "ipv4NodeSid" : 101,
      "ipv4Loopback" : "",
      "routerMac" : "00:00:00:00:01:80",
      "isEdgeRouter" : true,
      "adjacencySids" : []
    "basic" : {
      "driver" : "ofdpa-cpqd"

line 2: DPID of the device. 
line 4: Name of the device. It is an arbitrary name to identify the device easily.
line 5: Node Segment ID assigned to the loopback IP of this device. A globally unique node SID, which is used as an MPLS label in forwarding.
line 6: Router loopback IP address. Typically this IP should not be part of  the same subnet(s) defined on the dataplane ports (see port config).
line 7: Router MAC address. Arbitrary globally unique MAC. This MAC address will be used to reply the ARP request for the Router IP or the Interface IP that will be introduced later. (We recommend using the MAC address of the device's management interface as the router MAC.)
line 8: True for leaf switches. False for spine switches.
line 9: Reserved.  Just put an empty array for now.
line 11-13: This tells ONOS which OpenFlow driver should be loaded for this device. It overrides the driver selected by ONOS automatically when the device connects.
When using CpQD or OVS software switches, the driver need to be set to appropriate driver for the hardware pipeline we are trying to emulate (see software switch installation) .
When using hardware switches with OFDPA < 2.0GA (CORD 1.0), the driver must be set to 'ofdpa'.
When using hardware switches with OFDPA >= 2.0GA (CORD >= 2.0), the driver needs to be set to 'ofdpa3' or this entire block can be eliminated as the correct driver configuration will be set automatically by ONOS