Modular L2 Port Binding

Registered by Robert Kukura on 2013-06-03

The ml2 plugin currently returns a hard-coded value of "unbound" for the binding:vif_type port attribute. Instead, when a port needs to be bound, it should call into the registered MechanismDrivers to determine what mechanism and details will be used to bind that specific port, including the binding:vif_type value and the specific network segment to use.

MechanismDrivers for the openvswitch, linuxbridge, and hyperv agents would use the binding:host_id value from nova with the agents_db to see if their supported agent is running on that host. If so, it would would determine if a segment of the port's network can be bound by checking that agent's configuration to see if it supports the segment's network_type, and, where needed, if that host has a bridge or interface mapping for the segment's physical_network. If one MechanismDriver cannot bind, others would be tried, based on a prioritized list. MechanismDrivers for SDN controllers would also eventually participate in binding in the same way.

Before the binding:host_id has been set by nova, the binding:vif_type should have the value "unbound". If the binding:host_id has been supplied, and a valid binding cannot be created, then the binding:vif_type should have the value "binding_failed".

One open question is whether its sufficient to perform port binding each time get_port() executes, or if it should only be performed when details such as binding:host_id change, with the results cached in a database table.

Another open question, likely deferred until a future blueprint, is whether to support establishment of composite bindings. For example, a hypervisor vSwitch might be bound at the lowest level, along with a top-of-rack switch binding, and maybe a core switch binding. The port binding mechanism would need to make sure a complete and valid chain of bindings could be established.

Blueprint information

Status:
Complete
Approver:
Robert Kukura
Priority:
Medium
Drafter:
None
Direction:
Approved
Assignee:
Robert Kukura
Definition:
Approved
Series goal:
Accepted for havana
Implementation:
Implemented
Milestone target:
milestone icon 2013.2
Started by
Robert Kukura on 2013-08-05
Completed by
Mark McClain on 2013-09-04

Related branches

Sprints

Whiteboard

8-Jul (markmcclain): Moving to H3. If code is proposed and merged before H2 cutoff will move back.

Gerrit topic: https://review.openstack.org/#q,topic:bp/ml2-portbinding,n,z

Addressed by: https://review.openstack.org/43129
    Implement ML2 port binding

(?)

Work Items