During the Beryllium code sprint we plan to define the Fabric as a service API and implement these APIs through a Fabric Manager module and a OVS based VXLAN fabric. Those APIs intend to become a common abstraction layer between the applications and underneath network and abstract away the complexity of traditonal southbound API such as CLI, netconf, OVSDB, Openflow etc... To achieve the goal (becoming a common abstractio layer), we will integrate with GBP project and deliver a GBP renderer to demonstrate its capability in Be release.
FaaS feature or bundle exposes the following services to its external consumers. The consumers could be applications outside of ODL or modules within ODL. In Beryllium release, those APIs are limited to be used within ODL only. As FaaS matures, those service will be exposed to be part of ODL northbound.
Status - tentative
As the project progress, the APIs below are subject to change or removed or not implemented for this release according to our integration work with GBP or any internal projects for this release. They are not for ODL northbound used just yet.
Management API defines housekeeping interfaces to abstract, provision fabric objects as well as its life cycle management from initiation to decommission.
A fabric is an abstraction of a well configured underlay physical network or a portion of a physical network, which internally consists of a list of network nodes,a topology formed by those nodes as well as well configured underlay network ready for further virutulization.
Usally Those nodes supports the same l2 or l3 data path virtualization technology, such as VLAN, TRILL or VXLAN and share a underlay control plane. The control plane could be existing protocol running distributedly on those nodes or centralized provided by the fabric object within the controller.
The management API includes the following functions.
Fabric fabric = fabricManager.composeFabric(type, name, topology, typeSpecificOptions)
ResourceDescriptor rd = fabric.queryResource(fabricID);
fabric.addNode(Node node)
fabric.removeNode(Node node)
fabric.addLink(Link link)
fabric.removeLink(linkID)
fm.decomposeFabric(fabricID)
Core API defines the core services provided by a fabric object which are used to describe a logical network according to users’ requirements. It is implemented by Fabric object and includes operations for the following key FaaS objects.
A logical port is a logical counterpart of a physical port and provides layer 2 access point to a logical switch or a logical router. Depends on the variety of mappings to a physical port and a set of physical ports, it could be one of the following types
A bundling port is a object representing a port bundling of a set of physical ports which provides load balancing and HA merits
L3 Interface represents a layer 3 access point to a logical router. It could be
Also it could be either public or private.
Tunnel object represents a physical link abstraction. it provides Layer 1 connectivity, packet comes in one end of the tunnel and goes out from the other end without changed.
Logical Switch is an Layer 2 connectivity abstraction. It supports broadcast, could bind to a subnet, a gateway as well as DHCP services.
Logical Switch is an Layer 3 connectivity abstraction.
ACL provides stateless flow control. It consists of a set of ACLEntries, each entry includes a pair of Classifier and Action
LogicalPort lport = fabric.createLogicalPort(phyiscalportID, logicalID);
fabric.removeLogicalPort(lportID);
PortStatistics stats = lport.getStatistics()
L3Interface l3if = fabric.createL3Interface(IPAddress, public | private)
l3If.bindLP(lpID);
l3if.bindLSW(lsw);
L3Statistics stats = L3if.getStatistics()
LogicalSwitch lsw = fabric.createLSW(name, resourceID, … )
fabric.removeLSW(lswID)
lsw.attachLogicalPort(lp);
lsw.dettachLogicalPort(lp);
LSWStats stats = lsw.getStatistics();
lsw.getAttributes();
LogicalRouter lr = fabric.createLR(name);
fabric.deleteLR(lr);
Route[] rs = fabric.lr.getRoutes(); L3Interfaces[] rs = fabric.lr.getInterfaces ();
lr.attachInterface(l3Interface);
lr.addRoute(lr, Route); lr.deleteRoute(lr, Route);
lr.ping() lr.traceroute()
Tunnel tunnel = fabric.createTunel(logicalPortPeer, tunnelID, tunnel specific options);
fabric.removeTunel(tunnelID);
tunnel.getAttributes();
tunnel.ping() tunnel.traceroute()
ACL APIs allows applications to enforce stateless ACL control over logical ports and layer 3 interfaces. Its functionality includes
ACLEntry entry = logicalPort.addACL(classifier, action, location); ACLEntry entry = L3Interface.addACL(classifier, action, location);
logicalPort.deleteACL(entryID) l3Interface.deleteACL(entryID)
logicalPort.getACL() l3Interface.getACL()
Resource Managment API aims to support multi-tenancy. It does so by allocating and managing network resource within a Fabric including topology restrictions, ports, logical network id allocation and bandwidth into smaller fabric objects. The functionality includes
Fabric smallFabric = resourceManager.sliceFabric(fabric, resourceConstraint);
resoureManager.removeSlice(smallFabricID);
resourceManager.assign(tenantID, Fabric[]);
TopologyGetTopologyByTenantID(tenantID) // a fabric based abstacted topology object.
Name | Description |
---|---|
Fabric Manager | Fabric CRUD, network resource management, fabric based topology build as well as Rendering tenant logical network into services provided by fabrics |
OVS Fabric | a fabric implementation based on OVS/VXLAN encapsulation |
Milestone | Offset 2 Date | Deliverables | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
M1 | 8/6/2015 |
| |||||||||||||||
M2 | 9/3/2015 |
| |||||||||||||||
M3 | 10/15/2015 |
| |||||||||||||||
M4 | 11/12/2015 |
| |||||||||||||||
M5 | 12/17/2015 |
| |||||||||||||||
RC0 | TBD |
| |||||||||||||||
RC1 | TBD |
| |||||||||||||||
RC2 | TBD |
| |||||||||||||||
Formal Release | TBD |
|
Fabric as a Service API
No incompatibilities with other projects
New Project. N/A
No deprecated APIs or functionality.
No APIs or functionality will be removed.
A faas Based GBP renderer will be done within GBP projects, FaaS API definition needs to factor in GBP requirements