Internal Transport Manager (ITM)

Internal Transport Manager creates and maintains mesh of tunnels of type VXLAN or GRE between Openflow switches forming an overlay transport network. ITM also builds external tunnels towards DC Gateway. ITM does not provide redundant tunnel support.

The diagram below gives a pictorial representation of the different modules and data stores and their interactions.

ITM Dependencies

ITM mainly interacts with following other genius modules-

  1. Interface Manager – For creating tunnel interfaces

  2. Aliveness Monitor - For monitoring the tunnel interfaces

  3. MdSalUtil – For openflow operations

Following picture shows interface manager dependencies

digraph structs {
	subgraph {
"genius" -> "resourcemanager";
"interfacemanager-impl" -> "alivenessmonitor-api";
"genius" -> "arputil";
"itm" -> "itm-impl";
"arputil" -> "arputil-api";
"interfacemanager-impl" -> "idmanager-api";
"alivenessmonitor-impl-protocols" -> "arputil-api";
"interfacemanager-impl" -> "interfacemanager-api";
"interfacemanager" -> "interfacemanager-api";
"arputil" -> "arputil-impl";
"interfacemanager-api" -> "mdsalutil-api";
"lockmanager" -> "lockmanager-api";
"idmanager" -> "idmanager-api";
"idmanager-impl" -> "mdsalutil-api";
"mdsalutil-testutils" -> "mdsalutil-api";
"interfacemanager" -> "interfacemanager-shell";
"lockmanager" -> "lockmanager-impl";
"arputil-impl" -> "arputil-api";
"itm-impl" -> "mdsalutil-api";
"alivenessmonitor" -> "alivenessmonitor-impl";
"idmanager-shell" -> "mdsalutil-api";
"idmanager" -> "idmanager-shell";
"interfacemanager-shell" -> "interfacemanager-impl";
"genius" -> "lockmanager";
"resourcemanager-api" -> "idmanager-api";
"interfacemanager" -> "interfacemanager-impl";
"itm-impl" -> "idmanager-impl";
"itm-impl" -> "lockmanager-impl";
"idmanager-shell" -> "idmanager-impl";
"alivenessmonitor-impl-protocols" -> "interfacemanager-api";
"itm" -> "itm-api";
"resourcemanager-impl" -> "mdsalutil-api";
"arputil-impl" -> "interfacemanager-api";
"itm-impl" -> "idmanager-api";
"genius" -> "alivenessmonitor";
"mdsalutil" -> "mdsalutil-impl";
"interfacemanager-impl" -> "idmanager-impl";
"resourcemanager" -> "resourcemanager-impl";
"genius" -> "idmanager";
"alivenessmonitor" -> "alivenessmonitor-impl-protocols";
"alivenessmonitor-impl" -> "idmanager-api";
"resourcemanager-impl" -> "idmanager-api";
"genius" -> "interfacemanager";
"interfacemanager-impl" -> "lockmanager-impl";
"mdsalutil-impl" -> "mdsalutil-api";
"idmanager-impl" -> "lockmanager-api";
"mdsalutil" -> "mdsalutil-testutils";
"mdsalutil" -> "mdsalutil-api";
"resourcemanager" -> "resourcemanager-api";
"arputil-impl" -> "mdsalutil-api";
"alivenessmonitor-impl-protocols" -> "alivenessmonitor-impl";
"genius" -> "mdsalutil";
"interfacemanager-shell" -> "interfacemanager-api";
"alivenessmonitor-impl" -> "alivenessmonitor-api";
"itm-impl" -> "itm-api";
"idmanager" -> "idmanager-impl";
"alivenessmonitor-impl" -> "mdsalutil-api";
"itm-api" -> "interfacemanager-api";
"resourcemanager-impl" -> "resourcemanager-api";
"idmanager-impl" -> "idmanager-api";
"alivenessmonitor" -> "alivenessmonitor-api";
"lockmanager-impl" -> "lockmanager-api";
"genius" -> "itm";
"interfacemanager-impl" -> "mdsalutil-api";
"itm-impl" -> "interfacemanager-api";

Code Structure

As shown in the diagram, ITM has a common placeholder for various datastore listeners, RPC implementation, config helpers. Config helpers are responsible for creating / delete of Internal and external tunnel.

ITM Data Model

ITM uses the following data model to create and manage tunnel interfaces Tunnels interfces are created by writing to Interface Manager’s Config DS.


follwoing datamodel is defined in itm.yang This DS stores the transport zone information populated through REST or Karaf CLI



This DS stores the tunnel end point information populated through REST or Karaf CLI. The internal and external tunnel interfaces are also stored here.



This Yang defines all the RPCs provided by ITM.




ITM Design

ITM uses the datastore job coordinator module for all its operations.

When tunnel end point are configured in ITM datastores by CLI or REST, corresponding DTCNs are fired. ITM TransportZoneListener listens to the . Based on the add/remove end point operation, the transport zone listener queues the approporiate job ( ItmInternalTunnelAddWorker or ItmInternalTunnelDeleteWorker) to the DataStoreJob Coordinator. Jobs within transport zones are queued to be executed serially and jobs across transport zones are done parallel.

Tunnel Building Logic

ITM will iterate over all the tunnel end points in each of the transport zones and build the tunnels between every pair of tunnel end points in the given transport zone. The type of the tunnel (GRE/VXLAN) will be indicated in the YANG model as part of the transport zone.

ITM Operations

ITM builds the tunnel infrastructure and maintains them. ITM builds two types of tunnels namely, internal tunnels between openflow switches and external tunnels between openflow switches and an external device such as datacenter gateway. These tunnels can be Vxlan or GRE. The tunnel endpoints are configured using either individual endpoint configuration or scheme based auto configuration method or REST. ITM will iterate over all the tunnel end points in each of the transport zones and build the tunnels between every pair of tunnel end points in the given transport zone.

  • ITM creates tunnel interfaces in Interface manager Config DS.

  • Stores the tunnel mesh information in tunnel end point format in ITM config DS

  • ITM stores the internal and external trunk interface names in itm-state yang

  • Creates external tunnels to DC Gateway when VPN manager calls the RPCs for creating tunnels towards DC gateway.

    ITM depends on interface manager for the following functionality.

  • Provides interface to create tunnel interfaces

  • Provides configuration option to enable monitoring on tunnel interfaces.

  • Registers tunnel interfaces with monitoring enabled with alivenessmonitor.

    ITM depends on Aliveness monitor for the following functionality.

  • Tunnel states for trunk interfaces are updated by alivenessmonitor. Sets OperState for tunnel interfaces


The following are the RPCs supported by ITM

Get-tunnel-interface-id RPC