[openstack-dev] [networking][ml2] Plugin mania: ML2, Big Switch, Arista, Tail-f

Luke Gorrie luke at tail-f.com
Mon Jun 10 11:56:39 UTC 2013


Hi Sumit,

Thanks for the quick reply about the Big Switch plugin. I follow up here to openstack-dev because I learned on friday that there are at least a dozen people interested in structuring/restructuring of plugins for Havana.

This is a huge brain dump trying to make sense of how OpenStack Networking provisions external hardware devices. Get a coffee first if you plan to read this mail :-).

7 jun 2013 kl. 19:48 skrev Sumit Naiksatam:

> Thanks for reaching out. We have definitely discussed creating a
> library so that the code can be more readily used. Just to make sure I
> understand your use case correctly, could you please let me know what
> exactly you are trying to achieve, what is the workflow, what is the
> backend entity to which you want proxy calls over, and how does it
> relate to the OVS/Linux-Bridge?

My own use case is for people with multi-vendor networks to write their own rules for how to provision OpenStack Networking on their devices. They have devices from Cisco, Juniper, Arista, PICA8, and so on, and they will write custom provisioning logic that maps their high-level OpenStack Networking setup (Network, Port, Subnet, …) onto their physical devices using any vendor-specific configuration options that they want for VLANs, QinQ, MPLS, and so on.

The implementation that I am working on is via a provisioning system called Tail-f NCS. NCS works by having a detailed YANG (RFC 6020) model containing the exact configuration of every physical network device (switch, router, etc). This global configuration is manipulated as one big tree data structure within NCS. The tree can be bi-directionally synchronized to/from hardware devices using diverse protocols like NETCONF, SSH/CLI, SNMP, OpenFlow, and so on.

NCS's OpenStack integration will add a YANG model of the OpenStack Networking configuration. Users will write their own custom logic for mapping the high-level OpenStack Networking configuration onto the low-level vendor-specific configuration items in their devices. NCS will do the dirty work of transactionally pushing these global configuration updates onto the network.

Specification here: https://docs.google.com/document/d/1bRHVTN60oY2y2NIZ0iT9CyLS0TWYTPA0MPhvmYJqQjU/edit

.. end of high-level bit ..

Technically speaking what I need is for OpenStack to be able to forward all interesting provisioning events - e.g. plug/unplug and create/delete/update of network/subnet/port - to an external system using any reasonable protocol e.g. HTTP/JSON based. This is how I will keep an up-to-date view of the current configuration and state of OpenStack Networking.

How to write the code? That is the big question for me. Reading the code that exists today, here is what I see as closely related:

Big Switch Plugin
Pro: On-the-wire looks like what I need: pass-through plugin RPCs directly over HTTP/JSON.
Con: Seems to be a _replacement_ for the LinuxBridge/OVS plugins rather than an addition.

Arista Hardware Driver framework:
Pro: Designed to run alongside standard OVS/Bridge functions and trigger extra provisioning.
Con: Layer-2 only? does not look like it has the hooks I need to push out information about Subnets for example. (I want as much detail as possible.)

ML2 Plugin:
Pro: Looks like the way forward in terms of mix-and-matching plugin functions.
Con: The specific functionality that I need is not implemented yet.

So! I seem to have several possible integration routes that I need to choose between:

1. Big Switch Plugin adapted to ML2 so that it runs in parallel with OVS/LinuxBridge.
2. Arista hardware driver plugin extended with hooks for more parts of OpenStack networking.
3. New "Tailf NCS plugin" written from scratch as an ML2 mechanism driver.

I would love to hear some input especially from you guys at Big Switch and Arista. I am flexible like young bamboo :-).

P.S. I hope that it was relevant to say so much about a proprietary product (NCS) above. If not then please give me a hint offline, I am new around here!

> On Fri, Jun 7, 2013 at 5:52 AM, Luke Gorrie <luke at tail-f.com> wrote:
>> Hi Sumit,
>> 
>> I see from Git history that you are the main author of the OpenStack
>> BigSwitch plugin. I have a question that I hope you can help me with.
>> 
>> I would like to make REST calls from OpenStack very much like the BigSwitch
>> plugin, but I would like to do this in parallel with the base
>> LinuxBridge/OVS functionality.
>> 
>> I am new to the OpenStack code. My understanding from talking with Kyle
>> Mestery and others is that the most straightforward way to do this in Havana
>> is to make REST calls from a "MechanismDriver" within the new ML2 plugin.
>> 
>> Now I would like to do this in a good way that does not duplicate a lot of
>> code from the BigSwitch plugin.
>> 
>> So I am wondering: do you have any plans for BigSwitch plugin development
>> during Havana? Do you think it would be a good idea to factor parts of the
>> existing plugin into a common library, or even to port the BigSwitch plugin
>> into a component of the ML2 plugin?
>> 
>> Thanks in advance for your advice :)
>> -Luke
>> 




More information about the OpenStack-dev mailing list