Overlay & Underlay Topologies In OpenDaylight

Posted by Kanika

This post is dedicated to develop an understanding of how Overlay & Underlay Topologies work in OpenDaylight. I have written a small plugin to create a working example of overlay and underlay topologies. But before we jump into what the plugin does, let’s go though some definitions.

Definitions

As defined in network-topology.yang, for a given topology an underlay topology is a topology on which the given topology is dependent on. So if “abstraction:1” contains grouping of nodes that belong to topology flow:1, we can say that “abstraction:1” topology is dependent on flow:1 and hence flow:1 is an underlay topology for abstraction:1 (or abstraction:1 is an overlay topology of flow:1).

network-topology.yang also defines supporting node which allows to capture for any given node, which node (or nodes) in the corresponding underlay topology it maps onto. A node can map to zero, one, or more nodes below it.

Let’s say an abstract group (with an Abstraction-ID-1) has nodes NE-ID 1 and NE-ID 2.

flow:1 will have information about nodes NE-ID1 and NE-ID 2.

abstraction:1 will have an entry for underlay topology as “flow:1” & node Abstraction-ID 1 will have two supported nodes NE-ID1 and NE-ID 2.

Plugin To Explore Overlay & Underlay Topologies

Now lets see what the plugin does – it exposes following rest APIs:

add-overlay-topology

Add a new topology. For instance add a new topology with identifier abstraction:1 and add flow:1 as it’s underlay topology.

How To Use This Plugin

You need to copy abstract-model-0.1.0-SNAPSHOT.jar and abstract-topology-manager-0.1.0-SNAPSHOT.jar in opendaylight’s plugin directory and start the controller. Please contact me here & I will email you the jars.

Example To Create Hierarchical Topologies

When the controller is started, this is how flow:1 looks like (we already know it )

Now we can use postman to create an overlay topology “abstraction:1” as below:

1

2

3

4

5

6

{

"input":{

"overlay-topology-id":"abstraction:1",

"underlay-topology-id":"flow:1"

}

}

This is how abstraction:1 will look like:

Now we will create two abstractions with id abstration-1 (contains nodes 1 & 2) and abstraction-2 (contains nodes 3 & 4) as below.

Note: Assumption is that flow:1 has 4 nodes with node ids 1, 2, 3 & 4 respectively. Also note that underlay-node-ids have to be same as node-ids of nodes in flow:1.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

{

"input":{

"overlay-topology-id":"abstraction:1",

"abstraction-id":"abstraction-1",

"underlay-node-id-list":[

{"underlay-node-id":"1"},

{"underlay-node-id":"2"}

]

}

}

{

"input":{

"overlay-topology-id":"abstraction:1",

"abstraction-id":"abstraction-2",

"underlay-node-id-list":[

{"underlay-node-id":"3"},

{"underlay-node-id":"4"}

]

}

}

This is how abstraction:1 looks like now:

Following this pattern let’s create another topology abstraction:2 which is an overlay topology of abstraction:1 and add an abstraction group abstraction-3 which contains abstraction-1 and abstraction-2 (which belongs to topology abstraction:1).

Thus we can create hierarchical topologies in OpenDaylight using the concept of overlay and underlay topologies.

Accessing Underlay Nodes

Using RPC get-underlay-nodes, we can get references of supporting nodes for a given topology id and given abstraction id:

1

2

3

4

5

6

{

"input":{

"topology-id":"abstraction:1",

"abstraction-id":"abstraction-1"

}

}

1

2

3

4

5

6

7

8

{

"output":{

"underlay-node-list":[

{"node-id":"2"},

{"node-id":"1"}

]

}

}

We can look up them in inventory or topology (flow:1) by creating the right instance identifier.