Contents
Table of Contents outline true
Design Overview
Genius contains four main components:
- Interface Manager
- Tunnel Manager
- Aliveness Monitor
- ID-Manager
these modules are developed as karaf features which can be independently installed. However, there is some dependency among these modules. The diagram below provides a dependency relationship of these modules.
the central/main component of Genius is the Interface Manager which uses other modules for its operations. All these modules expose Yang based API which can be used to configure/interact with these modules and fetch services provided by these modules. Thus all these modules can be used/configured by other ODL modules and can also be accessed via REST interface.
Following sections provide details about each of these components.
Interface Manager
...
Contents
Table of Contents outline true
Design Overview
Genius contains four main components:
- Interface Manager
- Tunnel Manager
- Aliveness Monitor
- ID-Manager
these modules are developed as karaf features which can be independently installed. However, there is some dependency among these modules. The diagram below provides a dependency relationship of these modules.
the central/main component of Genius is the Interface Manager which uses other modules for its operations. All these modules expose Yang based API which can be used to configure/interact with these modules and fetch services provided by these modules. Thus all these modules can be used/configured by other ODL modules and can also be accessed via REST interface.
Following sections provide details about each of these components.
Interface Manager
The Interface Manager (IFM) uses an MD-SAL based architecture, where different software components operate on, and interact via a set of data-models. Interface manager defines configuration data-stores where other opendaylight modules can write interface configurations and register for services. These configuration data-stores can also be accessed by external entities through REST interface. IFM listens to changes in these config data-stores and accordingly programs the data-plane. Data in Configuration data-stores remains persistent across controller restarts.
Operational data like network state and other service specific operational data are stored in operational data-stores. Change in network state is updated in southbound interfaces (OFplugin, OVSDB) data-stores. IFM listens to these updates and accordingly updates its own operational data-stores. Operational data stores are cleaned up after a controller restart.
...
Follwoing diagram provides a toplevel architecture of Interface Manager.
In addition to these datamodels, it also implements several RPCs for accessing interface operational data. Details of these datamodels and RPCs are described in following sections. Interface Manager also uses ODL Inventory and Topology datastores to retrive southbound configurations and events. As described above Interface Manager uses other Genius modules for its operations. It mainly interacts with following other modules-
Modules used by InterfaceManager
...
Introducing Egress Service Binding
Currently Interface Manager supports service binding on port ingress only. However, there are services that need packet processing on the egress, before sending the packet out to particular port/interface. To accommodate this, interface manager will be enhanced to support egress service binding also. This will be achieved by introducing a new “egress dispatcher table” at the egress of packet pipeline before the interface egress groups.
On different application request, Interface Manager returns the egress actions for interfaces. Service modules program use these actions to send the packet to particular interface. Generally, these egress actions include sending packet out to port or appropriate interface egress group. With the inclusion of the egress dispatcher table the egress actions for the services would be to
...
- Interface ConfigDS is populated
- Interface DCN in InterfaceManager does the following :
- Creates bridge interface entry in odl-interface-meta Config DS
- Add port to Bridge using OVSDB
- retrieves the bridge UUID corresponding to the interface and
- populates the OVSDB Termination Point Datastore with the following information
tpAugmentationBuilder.setName(portName
tpAugmentationBuilder.setName(portName);
tpAugmentationBuilder.setInterfaceType(type);
options.put("key", "flow");
options.put("local_ip", localIp.getIpv4Address().getValue());
options.put("remote_ip", remoteIp.getIpv4Address().getValue());
tpAugmentationBuilder.setInterfaceTypesetOptions(type);
options.put("key", "flow");
options.put("local_ip", localIp.getIpv4Address().getValue());
options.put("remote_ip", remoteIp.getIpv4Address().getValue());
tpAugmentationBuilder.setOptions(options);
OVSDB plugin acts upon this data change and configures the tunnel end points on the switch with the supplied information.
NodeConnector comes up on vSwitch
- Inventory DCN Listener in InterfaceManager does the following:
- Updates interface-state DS.
- Generate if-index for the interface
- Update if-index to interface reverse lookup map
- If interface maps to a vlan trunk entity, operational states of all vlan trunk members are updated
- If interface maps to tunnel entity, add ingress tunnel flow
Bridge is created on vSWitch
- Topology DCN Listener in InterfaceManager does the following:
- Update odl-interface-meta OperDS to have the dpid to bridge reference
- Retrieve all pre provisioned bridge Interface Entries for this dpn, and add ports to bridge using ovsdb
ELAN/VPNManager does a bind service
- Interface service-bindings config DS is populated with service name, priority and lport dispatcher flow instruction details
- Based on the service priority, the higher priority service flow will go in dispatcher table with match as if-index
- Lower priority service will go in the same lport dispatcher table with match as if-index and service priority
Interface Manager Sequence Diagrams
Following gallery contains sequence diagrams for different IFM operations -
...
options);
OVSDB plugin acts upon this data change and configures the tunnel end points on the switch with the supplied information.
NodeConnector comes up on vSwitch
- Inventory DCN Listener in InterfaceManager does the following:
- Updates interface-state DS.
- Generate if-index for the interface
- Update if-index to interface reverse lookup map
- If interface maps to a vlan trunk entity, operational states of all vlan trunk members are updated
- If interface maps to tunnel entity, add ingress tunnel flow
Bridge is created on vSWitch
- Topology DCN Listener in InterfaceManager does the following:
- Update odl-interface-meta OperDS to have the dpid to bridge reference
- Retrieve all pre provisioned bridge Interface Entries for this dpn, and add ports to bridge using ovsdb
ELAN/VPNManager does a bind service
- Interface service-bindings config DS is populated with service name, priority and lport dispatcher flow instruction details
- Based on the service priority, the higher priority service flow will go in dispatcher table with match as if-index
- Lower priority service will go in the same lport dispatcher table with match as if-index and service priority
Interface Manager Sequence Diagrams
Following gallery contains sequence diagrams for different IFM operations -
Removal of Tunnel Interface When Removal of Tunnel Interfaces Updating of Tunnel Interfaces
OF Switch is Connected in Pre provisioning Mode in Pre provisioning Mode
Creation of tunnel-interface when OF switch is Creation of vlan interface in pre Creation of vlan interface when
connected and PortName already in OperDS provisioning mode switch is connected
deletion of vlan interface in deletion of vlan interface when node connector added_updated
pre provisioning mode switch is connected DCN handling
node connector removed Updating of Tunnel Interfaces updation of vlan interface in pre OF Switch is Connected updation of vlan interface when
DCN handling in Pre provisioning Mode provisioning mode in Pre provisioning Mode
Creation of tunnel-interface when OF switch is connected
connected and PortName already in OperDS