[openstack-dev] [nova][neutron] Update on os-vif progress (port binding negotiation)

Jay Pipes jaypipes at gmail.com
Thu Feb 18 15:33:09 UTC 2016

Hello Stackers,

Apologies for the delay in getting this update email out to everyone.


We are making good progress on the os-vif library and plugin system. We 
have immediate goals for Mitaka, all of which are in progress and on 
track to complete by Feature Freeze.



Over the course of the last two years, a number of proposals were put 
forth to increase the velocity of development in Nova around new virtual 
interface types. Nova core contributors generally are not networking 
experts and the engineers familiar with network interface setup were 
frustrated with the slow pace of reviews in Nova whenever they wanted to 
add or extend functionality.

After much debate, we settled on a proposal to create an os-vif Python 
library that would allow these network-focused contributors to maintain 
and enhance the code for virtual interface plugging separate from Nova. 
VIF types would be loaded as stevedore plugins, enabling easier addition 
of new VIF types and enhancements of existing ones.

In addition to developer velocity, the creation of the os-vif library 
was a perfect opportunity for the Nova developers to clean up and 
standardize the object modeling currently in use to represent virtual 
interfaces and networking objects in Nova. The os_vif.objects.VIF object 
model uses *versioned* objects now, enabling a future structured 
evolution of the data interchange format between Nova and Neutron. This 
interchange of information is typically called "port binding 
negotiation" and has been the source of a lot of spaghetti code both in 
Nova and Neutron. The move to a versioned objects interchange format 
will dramatically reduce the lines of code needed for this port binding 
negotiation and simplify this part of Nova.


The team has the following goals for Mitaka:

* Ensuring the os-vif library is complete and fully unit-tested
* Ensuring the reference plugin implementations (OVS and LinuxBridge) 
are in the os-vif code tree and also fully unit-tested
* Replacing the plug() and unplug() code in Nova for the OVS and 
LinuxBridge VIF types
* Submitting changes to devstack and project-config that install os-vif, 
enable the OVS and LinuxBridge plugins, and run a full set of Tempest 
functional tests to validate the interactions between Nova and os-vif

For Newton, we will be pushing for the following:

* Blueprint and implementation of changes in Neutron to send a set of 
serialized os_vif.objects.VIF objects back to Nova instead of the 
current port:binding mess (this is what is referred to as the "port 
binding negotiation process")
* Swapping out more of the non-LinuxBridge, non-OVS VIF type 
implementations in Nova's vif.py with calls to os_vif.[un]plug()
Full gate test coverage of more of the plugins


We have an os-vif-core team that has been reviewing and merging code in 
the os-vif main source repository [1]. Dan Berrange, Sean Mooney, Moshe 
Levi, and Sahid Ferdjaoui have done the bulk of the work in bringing the 
prototype library I had put together on GitHub into the OpenStack 
git.openstack.org repository. Thank you guys very much!

Dan has a work-in-progess patch to Nova [2] that replaces some of the 
code in nova/virt/libvirt/vif.py with calls to os_vif.

 From our Mirantis team, I've asked Sergey Belous to handle any 
necessary changes to devstack and project-config (for a functional test 
gate check job).

Myself, I continue to do my best to get through code reviews for 
additions to the os-vif library.

If you are interested in joining the os-vif effort, please come find 
danpb, jaypipes, sahid, sean.k.mooney or MosheLevi on #openstack-nova or 
#openstack-neutron on Freenode IRC.

Thanks for reading,

[1] http://git.openstack.org/cgit/openstack/os-vif/tree
[2] https://review.openstack.org/#/c/269672/

More information about the OpenStack-dev mailing list